+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.
is checking for buf.isEmpty enough here?
what if pushed elements are all ByteString.empty, shouldn't that result in one ByteString.empty downstreams, before completing?