Don't suppress foralls in the RHS of a type synonym definition!

Fixes Trac #7872
Improve documentation of kind polymorphism
Make isPredTy not use typeKind

The pretty-printer uses isPredTy to decide whether to use "=>" or "->",
and typeKind crashes on ill-kinded types. But it's really unhelpful for
the pretty-printer to crash on an ill-kinded type, because then you can't
see it!
Eliminate (given) flatten-skolems in favour of user type variables

See Note [Eliminate flat-skols].  IT wasn't exactly wrong before
the the error messages are deeply strange.
Fix kind quantification (again)

We simply weren't quantifying kind variables at the points we
were claiming.  In paritcular, in
     forall (a:k). blah
we quantify the 'k' around the 'forall a', provided k isn't
already in scope
In doTopReactDict, try lookup even if fundeps work

Previously we looked for fundeps, and if any fired we
didn't try to solve the constraint.  But that's wrong
(see Note [Weird fundeps]).  Now I solve first and only
if that fails try fundeps.  Code is neater too.

Fixes Trac #7875