Handling of EmailReference messages

This pull request handles the EmailReference pointer message (related to #4) as discussed in #18.

It has been tested with:
* [Mailtrap.io](https://mailtrap.io/)<sup>*</sup> for attachments of small size ~1MB
* the technique I previously described [here](https://github.com/GreanTech/Qaiain/pull/18/files#r14179272) for attachments of size ~20MB

-----

<sup>*</sup>Mailtrap.io rocks!, by the way. :) 
Yes, although I'd like to reword this a bit.

A message reference that points to a non-existent BLOB indicates that the message was already handled. Handling the message from the queue should be an idempotent operation, so I agree that the message should be deleted from the queue.

However, I *would* prefer that we hide the implementation details of StorageException in a function, and get a bit of test coverage around this behaviour.

Would it make sense to add a new case to the `EmailMessage` Discriminated Union? A case that captures the state where the email reference points to a BLOB that's no longer there. It's not quite `Unknown`, but rather something like `OrphanedEmailReference`.