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 ???
Any reason you chose this design over making the attribute accessor aware of the supertype? Shouldn't this logic live higher in the abstraction stack? All `Value`s have attributes and supertypes.