refactor combinator to use iterators and package stream interators to share an underlying stream range that tracks file position and allows safe iterator assignment, resulting in a > 25% performance improvement, more flexible combinators, and more elegant handling of backtracking