Add a MonadIO instance for RequestsT
Use pipes coroutines instead of forking threads

Getting rid of threads simplifies the code an awful lot, and reduces a lot of
chances for weird race conditions.