moved isSuccess et al
Squished the Failure hierarchy
Generalising type signatures.

Replaced use of ResultT with MonadError Failure
Replaced use of StateT with MonadState
Replaced use of IO with MonadIO

This will make it simpler to tie everything together at the edge of the app