s/protocol captures the var not value, to support subsequent extensions in clj

Fixes #164

Also simplifies the code, sine we just adopt the ClojureScript approach in Clojure.