Tuple.java: Fix #478 by retaining the tail of the Tuple when it's not itself a Tuple.
Issue #478: TypeDescriptor: When we're creating a TypeDescriptor for a union flatten
out unions within the members of the union, otherwise it's possible to create
type descriptor trees like this:

  union
  +-- Integer
  +-- Union
      +-- Integer
      +-- Character