+str: IteratorInterpreter and ByteStringBatcher

IteratorInterpreter takes an Iterator and produces an Iterator, executing a sequence of DeterministicOps in between (DetachedOps and BoundaryOps are extremely dangerous here, so I disallowed them). There is also a quick'n'dirty ByteStringBatcher that tries to accumulate bytes until a limit has been met. 

The IteratorInterpreter does **not** check the input/output types of the Ops, it is the responsibility of the user classes to take care of it.
that is not how the built-in DeterministicOp are done, e.g. Fold
it might not have downstream demand here, I guess