Implement encoding for higher-kinded variables.

Now it is possible to write types as: ANY1 -> ANY ANY1

Types with constraints can be written as:

Dict (Monad ANY) -> ANY1 -> ANY ANY1

where 'Dict' comes from "Data.Constraint" in the package "constraints".

'(\Dict -> ...)' can be used to produce the Dict argument:
(\Dict -> return) :: Dict (Monad m) -> a -> m a

And the type representation of the polymorphic type can be obtained as
usual:

typeOf ((\Dict -> return) :: Dict (Monad ANY) -> ANY1 -> ANY ANY1)
Implement backward compatibility for GHC 7.6.3.
Implement backward compatibility for GHC 7.4.2.