Equality for most types

Most types should now support `-eq`:

* characters
* strings
* maps
* vectors
* sets
* ISeqables

Additionally, maps and sets can now be used as functions as they can be in Clojure and vectors, maps and sets now support `contains?`. (IAssociative got a new `-contains-key` protocol method for that.)

I'd like to add tests for `-eq`, but #36 blocks that for now. Apart from that, I think that this is ready to merge, but I'd appreciate if someone would take a closer look at it before doing that.
Could probably look something like this (untested) pixie code. Could also be done this way in rpython if you want:

```

(deftype Unknown [])
(def unknown (->Unknown))

(defn -eq [self other]
  (cond
   (not (map? other)) false   
   (not (= (count self) (count other))) false
   :else (reduce (fn
                   ([_ entry]
                      (let [other-val (get other (key entry) unknown)]
                        (if (not (= other-val (val entry)))
                          (reduced false)
                          nil)))
                   ([_] true))
                 nil
                 self)))

```