Explicitly define a type collection to have a flat hierarchy.

The "root" of a collection is defined to be the class highest in the
hierarchy that includes TypeCollection::Base.  Inferred type is always
based on the collection root.
Allow deferred registration of child types.

If a child type cannot have a name when it's created, then it simply is
not registered with the collection root at creation time.  It will,
however, need to be manually registered later.
Merge making a typecollection heirarchy implicitly flat, even through multiple levels of inheritance