'Iteration utilises a results cache which iterates the cursor
in batches of ``ITER_CHUNK_SIZE``.
If ``self._has_more`` the cursor hasn\'t been exhausted so cache then
batch. Otherwise iterate the result_cache.'

def __iter__(self):

    self._iter = True
    if self._has_more:
        return self._iter_results()
    return iter(self._result_cache)
