Set workerExitCode only when using initialized pipes, return if exists

Most of my changes were abstracted out into the module consuming this (making `readPipes` asynchronous to give time to bind event handlers), but here are the changes that are still needed that have been added to this PR:

* Fix the commented out require statement for local files (should not be necessary once we move away from CFX)
* Return `pid` from the worker so it's exposed to the consumer (although Windows won't have this, atleast we can get it on Unix)
* Only set `workerExitCode` when its > 0 -- this is because all pipes run this check (stderr, stdout), and stdout can return an exit code of `4132` for example, but then stderr will also return an exit code of -1 never having been initialized -- we don't want the exposed exit code to be -1.

Give this a go and see if it works for the simulator, I have these changes in the SDK child_proc implementation