Union types represent the disjunction of types.  In conjunction with
singleton types, they can be used to represent C-style enum's.
| <union> | (<type>) | C | 
| t+ | (types|... => <union>) | G | 
|  | returns union type representing disjunction of types. |  | 
| union-elts | (x|<union> => <seq>) | G | 
|  | types that union type matches. |  | 
| t? | (type|<type> => <union>) | F | 
|  | ==  (t+ (t= #f) type) (cf., Dylan's
  false-or).  This is often used to widen a type to include the
  convenient false null. |  | 
|  |