Currently, if you wish to make use of process descriptors then you must
use fork and incur the full CoW overhead for the child process, even if
it intends to call execve immediately.
This patch refactors the fork / vfork / pdfork implementations (which
included a lot of copied and pasted logic) into a single function and
implements wrappers for all four combinations of {fork, vfork} behaviour
combined with {fork, pdfork} output types.