Initial work on mass-mail daemon
Handle errors by re-queuening on failure queues
Use Heist to template emails
Add a command line tool to dispatch emails
Rudimentary rate limiting for the email sender
Slightly better error reporting for unroutable messages
Slightly tidied up cabal files
enqueue: Refactor 'evaluateCommand' out of 'run'

This makes it a little clearer that the Command interpreter should
produce a list of emails, and not have to worry about actually publishing
these on the message queue.
Use 'noreply@musicbrainz', not 'no-reply@musicbrainz'
Use explicit import lists or qualified imports
mailer: Attempt to refactor 'emailConsumer' to be the sum of smaller programs

'emailConsumer' is now a few IO actions, followed by a call into 'maybe' on JSON
deserialization, and then an 'EitherT' action to try and send the email,
handling a failure by dispatching to the unroutable queue.
enqueue: Write a test suite to make sure that enqueue works
Test email templates are expanded correctly
Lifted out call to sendmail; test mails are sent

Now tests that if a command is put onto the outbox queue, that the consumer will
dequeue it and actually send an email.
More refactoring of commonality, also test unroutable mail
Prefer GHC Generics over SYB generics
cabal: Restructured into a `library` and two `executables`
Move Heist initialization out of consumeOutbox; test templating failure
A tiny bit more test coverage
Move the rate limiter out of 'consumeOutbox'

Instead, take advantage of the ability to compose the sendMail routine,
and wire up a rate limiter in 'main'. This leads to faster test runs,
and a simpler more focused 'consumeOutbox'. The rate limiter was not
really getting tested anyway, so this will force me to write tests for
it in isolation.