More robust message parsing

This replaces the usage of attributes from the System.Xml.Serialization namespace, as discussed in #3.
Yes, I understand what it *does*, but what value does that intermediary step add?