I think it’s also helpful to think about what you’re giving up with an iterator model vs either sequences or transducers with reducible collections. What are the tradeoffs? One of the biggest is that you have moved from thread-safe immutable objects to thread-unsafe mutable objects. To me, that’s giving up a lot, and not what I want as a default.
A lot of what you’re doing here is the exact same thing transducers take advantage of (that’s why MultiIterator exists - it’s embedded in the transducer machinery), except they don’t expose an unsafe interface.
As an aside, I found it hard to replicate any of the numbers in here - everything seemed at least an order of magnitude faster on my 4-year old laptop, making the differences pretty small.