rework Pipes to share a join object to store currently waiting green threads, to ensure green threads aren't garbage collected when paused