Iterator<T> cached done flag. Not fully thought through, but I think much better and closer to what we want, but I think we need to redo this further
comments