start adding second version of parser (add error reporting)

put common combinators into separate module

because the mtl instances are sometimes not what I need (e.g. Alternative's
for ErrorT), create a new type class 'Plus' and use it instead of Alternative,
and create instances with the desired semantics
get error-reporting up and running

do an end-around on the Error type class and the MonadError
instances of ErrorT and Either by creating a new datatype,
Either', with a sane MonadError instance

factor code more into separate modules