Union Types

This is the starting implementation of Union Types as proposed in #805. It includes all parts of the core proposal, but not the "Possible Next Steps" (yet). The implementation reflects the decisions we made in the 10/3 design meeting.

@RyanCavanaugh The pull request doesn't yet include new test baselines (and thus the Travis build will appear to fail). The deltas all look good, but a number of tests are now incorrect and need to be modified. I'm wondering if I can get you to help out with that.
The argument ```() => (a => a.foo)``` is not contextually typed so ```a``` gets ```any``` and then we attempt to relate the return type ```a => a.foo``` to the parameter type ```(a:T) => void``` and get ```any``` as an additional candidate for T. I believe it's this bit in 3.8.6:

>o	If M is a call signature and a corresponding call signature N exists in S, N is instantiated with the Any type as an argument for each type parameter (if any) and inferences are made from parameter types in N to the corresponding parameter types in M for positions that are present in both signatures, and from the return type of N to the return type of M.

I can see why the new compiler is giving an error if ```any``` is not added to the candidate set but I'm not clear on what rule makes us stop gathering the ```any``` there as the old compiler appears to be per spec there.