We should remove all in place mutability for code that ends up part of the state monad and make fool proof APIs that force us (or strongly nudge us) towards reading the state right before writing it.
Would help prevent things like #792 (ie #782) and #534.