Avoid searching if an iterator is already positioned correctly.

Some fiddling to avoid const warnings.
> I see - I was thinking GetCursor was doing something different, sorry.

The semantics are different on the caching branch, but it's still a different cursor from the iterator.

Michael.=