refactor Iterator __next__()

- Moved code to set read cursor to _next()
- Fixed stop for negative step size
- Added some tests

Is there a reason for:
  def __init__(self, collection, stop=None, start=None, step=None, bbox=None):
and not:
  def __init__(self, collection, start=None, stop=None, step=None, bbox=None):
?

Open issue?
While collection supports getitem, it is not supported by filter():