Support for higher-kinded types in rank1dynamic

These patches allow Data.Rank1Typeable to represent type variables with kinds other than `*`. This is done by using the magical kind-polymorphic `GHC.Exts.Any` when representing these variables.

For instance, previously, it was not possible to represent the type of

```Haskell
return :: Monad m => a -> m a
```
Even by reifying the constraint as 
```Haskell
data MonadDict m = Monad m => MonadDict

returnD :: MonadDict m -> a -> m a
returnD MonadDict = return
```
one still could not write the type as
```Haskell
returnD :: MonadDict ANY -> ANY1 -> ANY ANY1
```
because in the above `ANY` is expected to have kind `* -> *` where the implementation would only allow `*`. Now, such a type signature is valid after these patches.

For convenience, we reexport the datatype `Dict` from @ekmett’s [constraints](http://hackage.haskell.org/package/constraints) package. With `Dict` we can reify and abstract away constraints in an expression:
```Haskell
(\Dict -> return) :: Dict (Monad m) -> a -> m a

((\Dict -> return) :: Dict (Monad m) -> a -> m a) Dict :: Monad m => a -> m a
```