Change/type aliases

Avoid identifying type aliases as TypeBounds where the lower and upper bound are `eq`. This
is too fragile, in particular it might have false positives for type aliases, which go the other way when
compiling in a second run.

I tried to identify a type alias as a type where the bounds are `=:=`. But this gave CyclicReference
errors which seemed very hard to avoid. So the new scheme is different. TypeAliases are explicitly
created. 

Review by @DarkDimius