Make iterators a bit friendlier to use

`first` now works on any IIterator, returning `-current`, and
`-iterator` is supported on IIterators as well to make the following
possible:

    (map inc (distinct [1 2 3 1 -1 10]))