Separated out the mandatory mapping rules

Separated out the mandatory mapping rules from the overridable so that
the user can't, say, change the fact that only classes are mappable
types
Allow non-interface related collections

Related collections can now be Lists and Collections, not only
interfaces