Catch exceptions and handle them appropriately

There are three cases in which exceptions might happen:

1. Initialisation code

2. "Action" code which communicates with an external data source.

3. Handler code.

Exceptions which escape each of these three different types of code should be handled appropriately.

Included:

- Log and propagate all exceptions which escape initialisation code.

- Catch, return (in `ExceptT`), and log all exceptions which escape an action.

- Log and propagate all exceptions which escape handler code.

- Test these requirements.