Implementation of eval using Clojure protocols and pattern matching.