State Monad with bonus features and supporting macros for ClojureScript and Clojure