Abstract over MonadIO

This generalizes the whole public API (and a good part of private one) on `MonadIO`. This should be profiled/benchmarked and some functions should be `SPECIALIZE`'d -- I haven't done this yet. This also makes `Draw` a monad transformer -- if this is not desired, I can revert this part.

The other caveat is that (bad thing that FAM proposal was implemented only in 7.10...) `MonadIO` doesn't give us an `Applicative` automatically -- for now I've replaced all things dependent on it.