Dispatch on interfaces instead of concrete types

- Dispatch on interfaces where possible, based on implementation of seq?
  vector? map? set? and number? in clojure.core.
- Minor cleanup.
Remove unused manifest spec