clarifying iterator trait documentation

I found these things to be ambiguous, or at least worth stating explicitly to reduce the amount a user/developer needs to think about the API.
As above, this is meant for the user, not the implementor, so I think "should" is incorrect. Instead this can be

> If a `RandomAccessIterator` is a `DuobleEndedIterator`, then calling `next` or `next_back`
> reduces the indexable range accordingly. That is, `it.idx(1)` becomes `it.idx(0`).

That said, this actually implies that if a `RandomAccessIterator` is actually infinite, instead of being double-ended, then `next()` does not affect the behavior of `idx()` and that is presumably incorrect. I'm not sure the best way to phrase this, but it should be apparent that `next()` will transform `it.idx(1)` into `it.idx(0)` always, and the only difference between infinite and double-ended iterators is that it also reduces the indexable range on a double-ended iterator (whereas an infinite iterator has an infinite indexable range).