Added typechecking for case expressions
Fixed issue where the lexer returned EOF instead of the identifier

When encountering EOF while parsing an identifier it would not return the identifier that was parsed so far.
Added test for data declarations
Added functions to typecheck modules
Implemented Tarjan's algorithm for strongly connected components

Needed to find cycles in the reference graph.
The typechecker can handle bindings that are mutually recursive
Added case expressions and constructors to the compiler
Bugfix: The compiler did not adjust the stack before compiling alternatives
Implemented the new instructions needed for case expressions
Fixed the case compilation test
Fixed arguments for primitives being in the wrong order
Added tests for primitives for the VM
Use the execute_main function in main
Only increment the row once when encoutering \n\r in the lexer
Parsing of bindings of operators had an extra next for the ')' token
Add a location to an automatically generated }