> Would the 'mark/reset' functionality be still relevant for CombineValuesIterator so that we can add this in ValuesIterator or should this be just restricted to ReduceValuesIterator?
My instinct is to add a new interface like MarkableIterator or somesuch, that only ReduceValuesIterator implements for now. If we later find a reason to use it in CombineValuesIterator then we can implement it there then. I use "interface" loosely. Since this appears in end-user APIs, it would better permit compatible evolution if we use an abstract class. It's not absolutely critical in this case, since we don't expect many users to implement this interface, but, e.g., a FilterReducer might reasonably implement it, and an abstract class would thus permit us to change this in ways that an interface would not without breaking user code.