DUI: tooltip for addons. Part 2

This PR should be merged after [that one](https://github.com/Benglin/Dynamo/pull/183).
This PR makes possible to generate input and output parameters for custom node from XML file.

Reviewers
@Benglin ,@vmoyseenko, please take a look.
Let's not keep ```private XmlNode xmlNode``` as class data member. Here's why and what we should do:

1. When ```GenerateInputParameters``` or ```GenerateOutputParameters``` methods are called, it is clear that the caller wants to get the input and output parameters (it is unlikely that a caller is only interested in inputs but not outputs). When one of the above is called, we call into ```TryToLoadXmlNode```.

2. In ```TryToLoadXmlNode```, load the XML document from ```Path```. This method should be renamed as ```TryLoadDocumentation```. The result of processing this XML is then put into two new class data members: ```List<Tuple<string, string>> inputParameters``` and ```List<string> outputParameters```.

3. We need to ensure ```TryLoadDocumentation``` is only called once, so both ```inputParameters``` and ```outputParameters``` must be initialized. ```TryLoadDocumentation``` will return immediately if these data members are not ```null```.

4. Put all the logic of ```GenerateInputParameters``` and ```GenerateOutputParameters``` methods into this ```TryLoadDocumentation``` method, those properties should only return ```inputParameters``` and ```outputParameters``` directly after calling ```TryLoadDocumentation```.

```csharp
protected override List<Tuple<string, string>> GenerateInputParameters()
{
    TryLoadDocumentation();
    return inputParameters;
}

private void TryLoadDocumentation()
{
    // If we got here before, don't do it again.
    if (inputParameters != null || (outputParameters != null))
        return;

    // Do things to load the XML and update input/outputParameters.
}
```