Add -XImpredicativeTypes, and tighten up type-validity checking (cf Trac 2019)
Somehow we didn't have a separate flag for impredicativity; now we do. Furthermore, Trac #2019 showed up a missing test for monotypes in data constructor return types. And I realised that we were even allowing things like Num (forall a. a) => ... which we definitely should not. This patch insists on monotypes in several places where we were (wrongly) too liberal before. Could be merged to 6.8 but no big deal.