All types will need to eventually be fully generic. Therefore, we need to eliminate indices when referring to types, and also be very lazy when accessing TypeInfo properties so that we don't access uninitialized types during model creation.