Add type inheritance to port, node, connection, constraint

This feature allows certain intermediate types to inherit from other intermediate types. Attributes (and ports) are also inherited (statically).

@maxqchen with respect to serialization there are a couple of things you care about in this branch:
* deserialization order matters because you have to have loaded the supertype before you can instantiate the derived type (one way might be to make sure the schematic is always serialized in the correct order, or you could do two passes)
* I'm not sure whether I need to do anything special with the field `supertype` -- should it be transient, or ???
No, this does work, because even with multiple layers of indirection the supertype will always be a `ConnectionType`. `isSubtype` only works if you have a particular instance of that type to check against -- you can't yet check for inheritance from a specific abstract type like `ConnectionType`, you have to have an instance of `ConnectionType`.