Allow a single worker process to manage multiple children

Rather than running N separate processes on a worker node to
process N simultaneous jobs, use a single parent worker process
which will poll for jobs and launch child process as needed up
to a maximum defined by conf value max_child_processes.

Includes a refactoring to clean up and separate the
single process and parent process worker code to eliminate
a lot of conditional code depending on configuration.

Also updated logging to be more consistent and to record worker
id, parent pid, and child pid (where applicable) to help with
tracing.
'_terminate', '_on_terminate' and '_on_shutdown' are a little intricate at the first look, not very obvious.