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 ???
It's not true that all `Value`s have attributes and supertypes. I need to think about whether attribute inheritance generalizes well to this case (especially because of things like port inheritance on `NodeTypeValue`s, which does not use the attribute system). I'll consider whether to refactor this after reading the rest of your review.