use .pipe

work in progress (still has failing tests), and breaks current API. Might be possible to support the yield workflow but I have removed those tests for now