simpler stdout read code in the worker - no need to use select on a non-blocking pipe
capture stderr from workers separately, and send it to the master (whereas stdout is still only displayed if running with --debug)