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 ???
That's a good point. I agree that this check is sufficient. —
Sent from Mailbox

On Wed, Sep 24, 2014 at 6:57 AM, Murphy Berzish <notifications@github.com>
wrote:

>>    }
>> -  
>> +
>> +  public ConnectionType(Map<String, TypeValue> attributes, 
>> +      TypeValue supertype) {
>> +    // supertype must be a ConnectionType for inheritance to work
>> +    if (!(supertype instanceof ConnectionType)) {
> 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`.
> ---
> Reply to this email directly or view it on GitHub:
> https://github.com/manifold-lang/manifold-core/pull/16/files#r17972271