A generic tree visitor in Clojure