Minor breaking API change in the definition of Type

Struct types can be anonymous or have types, formerly with a (Maybe
String) name.  TypeStruct has changed to now have an "Either Word64
String' for the name instead.  Anonymous structs now have a unique ID
for fast comparison.  Before, they were compared structurally - this
worked but was extremely slow.

Anywhere you match on

> TypeStruct (Just name) _ _ -> ...

match instead on

> TypeStruct (Right name) _ _ -> ...

or use the helper structTypeToName to conveniently get the name.