REPL: Add processStmtSimple WIP
Refactor monadic runners

There are far too many variations of how to run a monadic action. This
commit consolidates a few things without changing the order in which the
monad functions are called.

Further refactorings:
* A monadic runner does not need to get a function and its argument
  separately, so stop doing that.
* runMainErrors contains too much and prevents sharing the call to runErrorsT.
* parseCommandLine destroys the result of its argument for no great
  reason.
Move runErrorsT into parseCommandLine continuation

This should be safe because parseCommandLine is in CPS and does not use
the Errors monad.

One must also ensure that the Errors monad transformer does nothing
special if the effects are not used; this seems correct by inspection,
but I imagine it would be cooler to establish that using monad
transformer laws.
Monad wrappers: reorder more

Here I swap some runners where safe (hopefully).
runMainState ↦ withEmptyState
simpleRunMonads ↦ runOptMonadsWithAssertions, runMoreMonads ↦ runErrorsAndOptsWithEmptyState

I'm still slowly sorting this out.
Remove/cleanup monad runners

Now that I somewhat understand this whole thing, I can simplify a bit
all the layers I created.

* runErrorsAndOptsWithEmptyState can be folded into runErrorsAndOpts,
  adding state to a few callers who don't need it.
* runOptMonadsWithAssertions can be folded into its two callers
* runProcessFile can be inlined into its single caller (which is special
  anyway since it collects assertions)
* withEmptyState and runOptMonads can be moved into PTS.Process.Main
* withEmptyState can be shift leftwards at the top-level by swapping
  with runErrorsT, to clarify that it's a single shared state.
Cleanup interface for PTS.Interactive
Update REPL API and docs

* Take PTS instance as 1st arg
* Fix out-of-date code in DEVELOPMENT.md (we should automate testing of this)
* Expose state produced by processStmt, since there's no interesting
  return value. This means de-inlining some wrappers I just inlined :-(,
  but that's a local thing and with a clear purpose :-).
* Document how to lens out the interesting stuff
Cleanup PTS.Interactive
Restore order of ErrorsT and StateT monads

As requested by Tillmann:

"I'm concerned about the difference between s -> Either e (a, s) and s
-> (Either e a, s). The former recovers a clean state after recover is
triggered, while the latter keeps the state from the throwError.
Currently, it probably doesn't matter, but I would prefer the former for
its more powerful recover semantics."

in the discussion at:
https://github.com/Blaisorblade/pts/commit/2e4d540b93bf22f2a8e42e19e9b69b065152b1ec#src-lib-pts-process-main-hs-P8
Fix -fdebug-typing (see #88).

I messed up my #ifdefs in 853f67c2e5aaa1fdeb8339d1e07c8bca19ecfd68.
Merge pull request #84 from Blaisorblade/topic/monad-wrappers

Refactor monad handling to provide better REPL experience.