[Ready] Item access refactor

See #9517
A nice debug feature would be to check that the comparison is only done on iterators from the same vector (gcc does this with its checked iterators). That catches subtle bugs like this:
```
std::vector<int> v1, v2;
auto a = v1.begin();
auto b = v2.end();
if( a != b) { // can not compare iterators into different vectors.
```

But that is really optional and more a nice to have thing.