proxy subclasses using Clojure protocols defined on a method by method basis to allow fine grained extension