Make do-notation a bit more flexible (Trac #1537)
This is a second attempt to fix #1537: to make the static typechecking
of do-notation behave just like the desugared version of the same thing.
This should allow parameterised monads to work properly (see Oleg's comment
in the above ticket).
We can probably merge to 6.8.3 if it goes smoothly.
Incidentally, the resulting setup suffers from greater type ambiguity
if (>>=) has a very general type. So test rebindable6 no longer works
(at least not without more type signatures), and rebindable5 requires
extra functional dependencies. But they are weird tests.