Bug 895728 part 1.  Introduce "boolean" and "numeric" types, since those will be treated differently for purposes of distinguishability and overload resolution.  r=khuey
Bug 895728 part 2.  Make booleans, numerics, and strings/enums all be distinguishable from each other.  r=khuey
Bug 895728 part 3.  Fix overload resolution to work with the new boolean/numeric/string setup.  r=khuey
Bug 895728 part 4.  Fix unions to work with the new boolean/numeric/string setup.  r=khuey