Revert cFileWriterWrapper to goroutine-based pipe reading
Revert cFileWriterWrapper to goroutine-based pipe reading

This brings the method back to the algorithm @justinfx had originally used in
d8c627f8b9. I had wrongly removed the goroutine, thinking it was an unnecessary
complication. Actually, when you try to write more than 64KiB to a pipe on Mac
OS or Linux, writing blocks until the read end of the pipe has drained the pipe.
Since clients of cFileWriterWrapper generally can't control how much they write
at a time, we can't chunk the data up and run a big while loop. By reading from
the pipe in a separate goroutine, we can drain the pipe while filling it up.

@justinfx was also right to flush the cfile. Otherwise the tests fail because
all that io.Copy reads from the read end of the pipe is empty data when the pipe
isn't full.

justinfx/pigosat,wkschwartz/pigosat,wkschwartz/pigosat,justinfx/pigosat