Moving encrypt, sign and send logic from gateway (SMTP) to an OutgoingMail class

Creates a MailService that has the logic for encrypting, signing and sending messages. Factors that logic out of EncryptedMessage so it can be used by other clients
After some chatting, our current understanding is that the right/quickest thing would be to:
  1. change the `str(...)` to `.encode('utf-8')`
  2. enclose that in a try/except, and catch `UnicodeDecodeError`, and convert it to a more meaningful error (something like only ascii addresses are supported, or something like that)

So I'm going to merge and launch a new pull request with the above.