TypeVariable and TypeOperators holds "kind's"

Kind is how many type parameters a type takes to become a proper type. Previously the kind of a type were thought to be equal to how long the 'types' vector in 'Type' were but with type classes such as Functor, types may be partially applied so this is not enough
Converted the Type representation be curried

Added a TypeApplication constructor for Type and changed name for the Type_ enum to Type.
Fixed dead code warnings
Replaced all instances where ~[T] were used to build vectors with Vec<T>
Improved fmt::Show for Expr
Parametrized Module, Expr, etc. with an Identifier type

To implement renaming a better type than ~str for identification.
Added core::Module and translation functions from module::Module -> core::Module
Implemeted renaming

Renaming makes sure that all bindings have a unique name. Since lambda lifting will reorder the expressions it is necessary to use unique names in case a moving an expression changes which scope the expression is in.
Changed lambda_lifting to work on core:: types
Added the lambdas lifting function
Changed the compiler to compile core::Expr
Changed the compiler to do lookup based on 'Name'

Also changed the renamer to always give bindings defined globally to have the id 0. By being 0 a name can always be created for global bindings for the cases when one needs to be created during the compilers execution