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.
I think this came up elsewhere but it sure would be nice to display this in lambda form although we don't have a good way to do that right now. It's not actually specific to union types but it becomes slightly worse with them. Something like this:

```Array<() => string>```

feels much closer to what people write than

```Array<{ (): string }>```

And gets worse as you add unions:

```Array<() => string | () => number>```

vs

```Array<{ (): number | (): string }>```

The object literal with call signatures feels a bit like displaying the compiler's internal representation.