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 ???
Works great, the test cases broke but they broke exactly where I thought they would. New commits inbound.