Unification of Function, DSFunction, and DSVarArgFunction

This includes the work done for the Partial Application of Multiple Output nodes.

In a nutshell, this refactors the three classes in the title into a more organized inheritance hierarchy. Fundamentally, all three types of nodes represent a function call, and indeed all three compile down to a FunctionCall AST (or, in the case of partial application, a _FunctionObject).

In order to simplify things, all code dealing with specifics around what kind of function is being applied has been refactored into a separate class hierarchy of `Controllers`. This way, the logic that keeps nodes synchronized with a function definition is separate from the actual NodeModel. Hopefully this will help with testing in the future.

__NOTE:__ Right now it says that this can't be auto-merged, due to the fact that the original pull request this was based on was reverted. I will have to investigate a way to un-revert those changes and incorporate them into this pull request. I'm sure this will be super-complicated.

@lukechurch @ke-yu @junmendoza