Partial Application for Multi-Output nodes

Implemented for Custom nodes, DSFunction nodes, and DSVarArgFunction nodes.

![partial](https://cloud.githubusercontent.com/assets/1699155/3433971/f6747e38-0084-11e4-98ed-5aaa9f00735a.PNG)

This required some private utility functions in _FunctionObject.ds_ in order to properly compose partial functions. Specifically, we want to create a function that first accepts the missing inputs, and then fetches the appropriate output from the output dictionary for multi-out nodes. The function that pulls the output is called `__GetOutput`. The function that handles this special composition is called `__ComposeBuffered`.

When compiling a partial application of a multi-output node, we create a buffered function composition that, at a high level, looks like: 
```csharp
__ComposeBuffered({<partial_application_of_node>, __GetOutput(<return_key>)}, <number_of_args_missing_from_partial_application>)
```
This isn't exactly what the compiled AST look like, but you get the idea.

@lukechurch @ke-yu @junmendoza
The compilation logic for partially applied function is duplicated in DSFunction.cs and in Funciton.cs, we may move them to a single function...