Separate the execution of filterop from where it gets its input so that we can reuse it for refactoring.
Add unthread refactoring.
Support thread-first and thread-last.
Document refactoring in README.