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.
Ok, I missed the subtlety of parentheses around the inner lambda. The change in behavior actually relates to how the new compiler does overload resolution. Because the *outer lambda* in `() => (...)` has no type parameters or type annotations, it is considered subject to contextual typing and therefore excluded from the first round of type argument inference. That causes us to infer number and string (but not any) for T and therefore inference fails. If you put yet another set of parentheses around the argument
```TypeScript
var r9 = f10('', (() => (a => a.foo)), 1);
```
you get old behavior because the argument is no longer subject to contextual typing.

Many subtleties here, but I think the new behavior is just fine.