Add a new `k :: Constraint` parameter to CEq

`k` is used to capture the context for each constructor in a data
type. The motivation is that we want to be able to have representations
for GADTs such as:

    data MyGadt a b c where
      One :: Show a => Int -> MyGadt a b Int
      Two :: Read b => String -> MyGadt a b String
      Three :: (Show a, Read b) => MyGadt a b ()

With this commit, the `One` constructor has `CEq (Show a) ...`,
and `Three` has `CEq (Show a, Read b)`.

Template Haskell has been updated to correctly generate information for
k.
Committing what I have for moving p ~ q into a constraint
A few changes to make the example work