refactoring in Types

* Remove `QName' data type and replace with `Variable' type synonym.

* Change the representation of type variables from a name into a
  natural number. For instance a type would have been `forall a. a'
  and now it is `forall 0. 0' instead.

* Add function to bind forall quantified type variables in a type.
  These variables will be changed from `VarT n' into
  `ConT (TH.mkName (show n)) []'. Thus when this type is matched
  against (as the second argument) it will never match a forall as it
  did before.

* Add `sizeSubst' function
Continue refactoring in ExpGen

* Move type matching code from TypeCheck to this module.

* Before starting to generate values bind all forall quantified
  variables to fix some an issue where variables with the same exact
  type variable would both be saved to the context as, for instance,
  `forall a. a'. This is wrong since these two variables are exactly
  the same (the a is already bound!).

* Remove some commented out code

* Add `getSubstitutions' function
remove unused dependencies in cabal file
Move and completely reimplement the testing code

* Start organizing the different tests in different modules based on
  what is tested. Currently value generation and type matching is
  tested.

* Use a proper testing framework instead of doing everything by hand
  in the IO monad.
Delete TypeCheck module