librados: remove extra advance from objects_begin(position)

ObjectIterator::seek() already calls get_next() to update the
iterator's state. Calling it again goes one past where it should be.

When the iterator reached the end of the list, it deleted the ListCtx,
causing a segfault on further accesses.

Fixes: #7491
Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
librados: don't destroy ObjListCtx when iterator reaches the end

There's no need to destroy it when we've used it once. It'll get destroyed
by the destructor anyway. Now that there's a seek method, we might want seek
and iterate again anyway, which is not possible if the ObjListCtx is gone.

Change get_next() to check the underlying ObjListCtx for the end of iteration
instead of deleting ObjListCtx, and modify the equality operator to count
the end marker (with ctx == NULL) as equal to having a ObjListCtx at the
end of its list.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
librados: implement ObjectIterator copying and assignment

Copied iterators should be independent of each other, and not
rely on the same underlying ListContext or ObjListCtx.

Add some tests for this to make sure they work in various
circumstances.

Signed-off-by: Josh Durgin <josh.durgin@inktank.com>
Merge pull request #1294 from ceph/wip-librados-object-iterator

fix bugs in librados::ObjectIterator

Reviewed-by: Sage Weil <sage@inktank.com>