Cleared up some code in the parser
Use the getopts library to parse the command line arguments
Added checks for duplicate function definitions in the renamer
Made typecheck return a Type which is used when typechecking

To avoid having to worry about storing the correct type at each expression we start to move towards only working with the type returned from the typecheck function. When the typechecking is complete we should still be able to get all types since all needed types are bound to a name.
unify no longer directly updates the types of those it unifies

This avoids some clones if the type is not needed. If one of the input types need the new type it can use the Type that is returned from unify
Refactored unify to avoid as many clones as possible
Removed old assumption that StarKind could be any kind
Removed the old way of pattern matching on lists (: x xs)