Refactor notification sending and handle some exceptions.

* Keep track of which classes were already email-notified for and don't re-send emails.
* Make at most one email notification per round (group classes into one)
* Add a subject to the email message, and format class list
* Handle invalid to-email, general SMTP exceptions, and SMTP hostname errors.