Changed lambdas to hold a Pattern instead of a simple identifier
Added parsing and typechecking of patterns in bindings
Implement pattern bindings, parsing and some typechecking
Hacked together a slightly less stupid translation of pattern bindings

A single binding with not pattern matches will be translated as a lambda, anything else will be translated as:

map f (x : xs) = 1
map f [] = 2

->>>
map _1 _2 = case (_1, _2) of
    (f, (x:xs)) -> 1
    (f, []) -> 2
Fix the compileation of nested patterns

Off by one error in a pattern the new foldl
Added a fix for single argument functions
Fix the type printing not detecting function types
Fix nested pattern matching again
Added parsing of list patterns with the proper pattern x : xs
Treat single argument tuple patterns as simply the pattern itself