This represents an operating-system process with arbitrary input/output
pipes connected to it. Those pipes may represent standard input, standard
output, and standard error, or any other file descriptor.

On UNIX, this is implemented using fork(), exec(), pipe() and fcntl().
These calls may not exist elsewhere so this code is not cross-platform.
(also, windows can only select on sockets...)

This is where the hard work of disconnecting all currently open files /
forking / executing the new process happens. (This is executed
automatically when a Process is instantiated.)

This will also run the subprocess as a given user ID and group ID, if
specified. (Implementation Note: this doesn't support all the arcane
nuances of setXXuid on UNIX: it will assume that either your effective or
real UID is 0.)

The child wants to end up with 'childFD' attached to what used to be the
parent's parentFD. As an example, a bash command run like 'command
2>&1' would correspond to an fdmap of {0:0, 1:1, 2:1}. 'command
>foo.txt' would be {0:0, 1:os.open('foo.txt'), 2:2}.

This is accomplished in two steps:

1. close all file descriptors that aren't values of fdmap. This
means 0 .. maxfds (or just the open fds within that range, if
the platform supports '/proc/<pid>/fd').
2. for each childFD::
- if fdmap[childFD] == childFD, the descriptor is already in
place. Make sure the CLOEXEC flag is not set, then delete
the entry from fdmap.
- if childFD is in fdmap.values(), then the target descriptor
is busy. Use os.dup() to move it elsewhere, update all
fdmap[childFD] items that point to it, then close the
original. Then fall through to the next case.
- now fdmap[childFD] is not in fdmap.values(), and is free.
Use os.dup2() to move it to the right place, then close the
original.