Cleanup Ext + Add utility iterators

Having the methods as default impls prevents repeating signatures, and future-proofs for the possibility of implementation specialization.

Also adds `range` et al as well as the `count` adaptor.
This is probably supreme pre-optimization but could we move temp below `if f(old) { return }` since we don't use it if we return.