cache the next value (as well as the key) during iterator traversal to better tolerate concurrent modification