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.

We used to infer ```any``` for T because we would attempt to relate the return type of ```b``` and find ```any``` as a candidate for T (to go along with string and number candidates). It's not clear to me yet exactly how the inference changes have affected this.