type5 is much more first principles based, so we get a lot
of weird quirks removed:
- FromLiteral no longer needs to understand AST
- Type unifications works more like Haskell
- Function types are just ordinary types, saving a lot of
manual busywork
and more.
This also removes the InternalPassAsPointer experiment.
This also fixes that u8 values were stores as 32 bits
in structs and tuples (but not dynamic arrays since that
is special cased as bytes).
Also, fixes allocation issue wi th dynamic arrays, it
would allocate quadratic amount of memory.
By annotating types with the constructor application
that was used to create them.
Later on we can use the router to replace compiler's
INSTANCES or for user defined types.