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 
@tranma, @fractalcat I seem to recall @christian-marie or @thsutton having a view about ErrorT vs EitherT vs... Are we using the "right" one here now? I'm fine with case-by-case suppression of warnings, but this comment prompted me to ask.