Refactor to use Either for errors

The proper way to handle errors is with the Either monad (transformer).
So that's what we're doing. It works! So easy!
Fixed set() behavior

Was setting on the wrong state.
Adapted sqlite to use nodam-basic
Separated Either, added functions to it, tests

Either is useful enough that it needs its own file. Also added test for
Maybe and Either.
Fixed AsyncFailure piping

AsyncFailures returned from within a pipe were passing to the next pipe
instead of skipping
Added looping functions to nodam

loopWhile(f), loop(f), and forever().
Test for loops, simplify pipe

Test for loopWhile passes; loop() and forever() are un-endable, so I
don't know how to test them. I put all the bug-tracking business in
AsyncMonad::typed(), to simplify pipe().
Added monadize() to convert IO functions

There is now one fairly simple function for converting standard IO
functions to monadic ones.