Stream iter

These commits should probably be squashed at some point.

This needs the process function logic to match up with tests.