Callbacks as Clojure Records: an approach to generic Reagent components

@ericnormand as mentioned by @isaksky, I think that’s exactly what reagent.core/partial does?

Also note that the rationale for using a Protocol in this case is to have multi-operation polymorphism (plus some other documentation affordances).