Derive MonadThrow, MonadCatch, and MonadMask with GNTD
Previously MonadMask was missing genericBracket, which was introduced in
exceptions-0.9. While one could implement this manually, it's far
simpler to just allow the compiler to do this for us.
While in town, I also use GNTD to derive Functor, Applicative, Monad by
GNTD for the sake of consistency.