Made more efficient and quicker to recognize new writes
now will block by calling wait() on the FileBackedPipe object rather
than just looping until it sees input.  writing now wakes up any outputs
that may be waiting for input
Modified to use the new form FileBackedPipe.  
NOTE: not guarenteed to print everything in the correct order for large
streams of input given at almost the same time to System.out and
System.err