+str: Implement efficient stream op DSL

Explanation in the doc comment for Interpreter
This `exit` seems wrong to me: cancellation is not really stoppable, it must always just punch through to the boundary (and in fact I cannot find an implementation that contradicts me). If I am right then the `allowedToPush` problem goes away: finishing somewhere in the middle means that that element had the ball at that point in time, so there cannot be a ball downstream when this is invoked. So, unless I am missing something, `finish` rips a hole in the pipeline and tears down everything upstream of it and we are left with completion traveling downstream. When that is absorbed this can mean only one thing, namely that we were in need for downstream demand (otherwise the ball would have been downstream in the first place and the current element would be unable to initiate a `finish`).