Let coerce have a lower arity

by writing
 λ k α β c -> case c of (MkCoercible co) -> (λx. x) |> (α_R → co)
instead of
 λ k α β c x -> case c of (MkCoercible co) -> x |> co
which allows coerce to be inlined even when partially applied, and its
definition matches the shape of code generated from a newtype
constructor in, say, "map Age".
Replace forall'ed Coercible by ~R# in RULES

we want a rule "map coerce = coerce" to match the core generated for
"map Age" (this is #2110).
In CoreSubst, optimize Coercible values aggressively

just like boxed type equalities.
In simpleOptExpr, unfold compulsary unfoldings

such as that of coerce.
Add Case TyConAppCo to match_co
Test case for RULE map coerce = coerce

(This tests #2110.)