Functional combinators for strategy-based tree-rewriting in Clojure