Added the unit expression and type '()'
Cleared up the code in the typechecker

Removed the need to make all type signatures have unique variables (would cause problems with when two variables had different constraints), the constraints are instead cleared after each binding group (not a complete solution but works in the meantime).

Removed the need to use the constraints in the TypeEnvironment in compiler.rs

Also means the compiler no longer needs to hold a reference to a TypeEnvironment, all type information are stored directly in the expression tree.