WL-3170 Refactor and test email sending

This was a total mess with a mix of different classes for different types of email, yet different behaviours for these emails being defined in a big switch statement.

There is still a lot of type specific behaviour defined outside of the individual email classes but this change specifically extracts the behaviour for generating a list of events for making iCal files. Common behaviours are shared between groups of emails by subclassing.

This also introduces the `isCancellation` method to each email class, which is used to determine whether the resulting calendar attachment should take advantage of the `CANCEL` method.

There are tests defined for each of the types of email for which we are generating events.