Protocol polymorphism for JavaScript, as seen in Clojure and Elixir