Improved UX for Model Types

Basically, we are now burying the concept of "Model Type" as an
implementation detail.  You create a Property from a Model, and the fact
that a Type may get created behind that is mostly hidden.  We now reuse
the existing Type for this Model, if one exists.

Introduced getModelTypeInfo(), so that we can hide the mucky details
inside the types package where they belong.