Use a multimethod for complement

Also use instance? instead of satisfies? for performance.

Credit: Clojure Meetup (Manchester, NH)