=str #15755 #15756 First stab at input/output factories

* New naming based on Source and Sink

Some parts of this convoluted/wrong. Take a look and we can discuss.
It is reasonable to require that any FlowMaterializer must support Iterable and Iterator.
I'm not sure about the approach for other non-built-in types.