Better abstraction for passing constraints through levels.

Now no need for special instances of `SatisfyConstraint_` for `ContT`,
etc. and disallowing them from being instances of `MonadLevel` (and thus
losing the automation): just override `AllConstraintsThrough` in the
`MonadLevel` instance, and then define custom `ConstraintCanPassThrough`
instances.

This _does_ require `OverlappingInstances` though, and can lead to
problems if some constraint arises which `StateT`, etc. doesn't allow
thorugh.
Put more constraints in SatisfyConstraint{_,}

These are sensible and cover more usual cases, so less is now needed in
aliases other than `type Foo m = SatisfyConstraing Foo_ m`.