Use a MutVisitor in TypeEnvironment::substitute

Reduces the code about 60 lines
Fix lambda lifting not being done on class and instance bindings
Removed the use of the unsafe update function in lambda_lift.rs

Added a visitor for mutable core::Module, Expr etc
Made the lift_lambdas function use a visitor instead
Added where field to Alternative
Added where binding to case alternatives in the parser
Added where bindings to the visitors walk functions
Added typechecking of where
Added where bindings to the translation
Added where field to to module::Binding

Fixed all compilation errors
Added where for bindings to the parser
Added typechecking for where in bindings
Added translation for where bindings