Experiments with clojure protocols and state