UndoST - a revertible, state-transformer monad.