Use plain Stream interface: remove stop & start, connect pipes in reverse order as they are implicitly started when connected
Modify filestream: ignore end's coming from the underlying, real filestream by using PassThrough, which takes care of backpressure handling; Restart after end; stop closes the underlying stream and stops restarting by resetting the keepRunning flag
Remove stop & start, no longer needed
New logic: use Stream semantics to stop the child process when receiving 'end'; be correct and pass 'end' on