Improve a bad piece of code in `sendMail`.

It used pattern matching and then catching the exception using `handle`,
which is very non-idiomatic and error prone. Also the code seemed to
catch the failure only to rethrow it.
Improve `tryCommand` so that it includes the failed server response.
Merge branch 'master' into monadio
Refactor SMTP to use `MonadIO` instead of `Monad.

The change should be backward compatible.
Refactor SMTP to use just `Monad` instead of `MonadIO`, where possible.

This allows SMTP to be used against virtually any backend. This would be
expecially desirable for automated tests.

It would be nice to modify IMAP similarly, but it uses mutable state,
which has to be stored somewhere.