ToDo:

* inert_funeqs, inert_eqs: keep only the CtEvidence.
   They are all CFunEqCans, CTyEqCans

* Consider individual data types for CFunEqCan etc

* Collapse CNonCanonical and CIrredCan
  * RAE: I think it would be better to split off CNonCanonical into its own
    type, and remove it completely from Ct. Then, we would keep CIrredCan

The coercion solver
~~~~~~~~~~~~~~~~~~~~
Our hope. In GHC currently drawn from {G,W,D}, but with the coercion
solver the flavours become pairs
    { (k,l) | k <- {G,W,D}, l <- {Nom,Rep} }

But can
      a -(G,R)-> Int
rewrite
      b -(G,R)-> T a
?

Well, it depends on the roles at which T uses its arguments :-(.
So it may not be enough just to look at (flavour,role) pairs?

RAE: This is true, but it is taken care of by being careful in the
flattening algorithm. Flattening (T a) looks at the roles of
T's parameters, and chooses the role for flattening `a` appropriately.
This is why there must be the [Role] parameter to flattenMany.
Of course, this non-uniform rewriting may gum up the proof works.

