+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.
No, you can do it anytime. Almost all Op types are checked statically (i.e. if compiles, then you are allowed to do it), notable exceptions are ctxt.hold and ctxt.pushAndPull, which can only throw runtime exceptions if used improperly.