Better failure handling

This change attempts to encapsulate all possible failures in a Marquise operation and provide opportunities to recover. Changes:

  1. Converting all exceptions to ``Error``s so they can be caught even inside a pipe. This means we can simulate handling timeouts in the middle of a stream (e.g. for testing). [DONE]
  2. Offers ``*Resume`` versions of some client operations so that user can resume if a failure occurs, e.g. ``readSimpleResume`` from the timestamp at the point of failure onwards. [DONE]
  3. Define a pure store to test Marquise client interface [DONE]

The following won't be done in this branch:

  4. Add proper logging
  5. Clean up and add automatic testing for Marquise server daemon

The automatic testing in here only covers Marquise client.

@fractalcat @christian-marie 
I would like to use EitherT too but pipes and everything other library is still using ErrorT. Let's wait for them to move.