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

`(\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.