Simplification of types, easier interop with other libraries

I've been working on a simplified approach to setting up types and classes in persistent. In this process, I realized that the current setup of the mongoDB package will make such a rewrite impossible, since mongoDB forces usage of the `Action` transformer without exposing its internals.

I've worked on a fairly substantial overhaul of the types, which doesn't really change the inner operations or the user-facing API in a significant way. Some of the ideas behind this are described in my not-yet-published blog post on the subject:

https://www.fpcomplete.com/tutorial-preview/2896/z9jwaCGLzb

I'm not sure if all of the changes I've made here will be acceptable to you for merging, but I'd like to discuss two changes in particular:

* Remove `ErrorT` from the transformer stack.
* Instead of using an abstract `Action`, use a `ReaderT Context` type. Alternatively, if you want to keep the `Action` type, exposing its constructor so that persistent could treat it as a `ReaderT`.

Pinging @gregwebs.