Base Review PR

Review PR. Initial version. 

Please come forward with any comments/suggestions/questions/etc.

The core 'interface' is in Classes.hs, the core types are in Types.hs and Process.hs handles all the core plumbing.

A collector requires 3 things:

* A way of parsing collector-specific options + options descriptions.
* A way of generating initial collector-specific state from options
* A way of generating a (Address, SourceDict, TimeStamp, Payload) four-tuple
    * It might (read: almost definitely) be better to change this to a query of `(Either SimplePoint (Address, SourceDict))` or similar in order to decouple the number of points from the number of sourcedicts from the number of input lines (or equivalent)
This is actually the only user-facing operation that CollectorMonad means to expose, isn't it?

I don't see the purpose of the typeclass above. Looks like it'd be sufficient and more idiomatic to define a Collector monad, as you did below, and simply a run function. Some of the codebases around here have similar approaches, e.g retcon and query