#tf-data Re-use `GlobalShuffleIterator` for the Range dataset.
#tf-data Re-use `GlobalShuffleIterator` for the Range dataset.

Also fix an issue with global shuffling when not dropping remainders:

The original range_op implementation did not check out-of-range errors
after getting the shuffled index. If the parent iterator produces an
out-of-range index, it may return an out-of-range element.

Without fix, shuffling
```
range(10).batch(3, drop_remainder=False)
```
could return [[3, 4, 5], [9, 10, 11], [0, 1, 2], [6]]
which should be [[3, 4, 5], [9], [0, 1, 2], [6, 7, 8]]

However, this may be confusing to the users, so we'll not support
global shuffling with `drop_remainder=False` for now.
