Split functionality out into modules
Refactor S.H.runRequest
S.H.LL doesn't need a finish function if it has an instance for MonadIO

Simplifies LL a little more and helps prepare for generalising to provide a Fork
primitive, rather than request.  The MonadIO instance should be fine because
retries only resend a request, they don't re-run any (possibly IO) actions
outside of the driver.
Simplify LL to just support forking rather than worrying about input values