+str: Implement efficient stream op DSL

Explanation in the doc comment for Interpreter
I don't think there is much to do here while also keeping sanity of the code, but most of these types are there only to ensure safety of the client code, the interpreter does not really care (it gives the most general context types anyway, it carries user messages as Anys anyway, and the returned Directives are nulls anyway -- since they are just phantom types). If it is possible to make this nicer I am open for proposals.