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.
breaking change here, seems like we would want a union of the signatures? For clarity the case is:

```ts
var r7arg3 = <T extends Base>(x: { a: T; b: T }) => 1;
var r7arg2 = (x: { a: string; b: number }) => 1;
var r = [r7arg3; r7arg2]; // type of r is?
```