More robust message parsing

This replaces the usage of attributes from the System.Xml.Serialization namespace, as discussed in #3.
The `ToEmailDocument` function accepts an `XDocument` and returns the appropriate named case of the Discriminated Union – which is an `XDocument` so it can be passed via Pattern Matching to the interpreter functions.