clean up internals to make subclassing a more attractive prospect
note TypeRegistry might be better off in Type::Utils