Add structural checking of semantic types
Add structural checking of semantic types

This makes semantic types in generics work properly when the semantic
types are the same, but not exactly identical.

hartenfels/Jastics,hartenfels/Semantics4J