Split off MonadMask from MonadCatch.

My two biggest concerns with this pull request are:

1. I believe there is no valid `MonadCatch` instance for `ContT`. Am I mistaken?
2. The requirements I've stated for `MonadMask` do not feel rigorous enough. I'm also worried that the statement regarding ``f `finally` g`` having `g` run even with async exceptions is inaccurate, since with a non-IO base monad, that won't occur. But I'm uncertain of a better way to word it.