Fix errors returned from posix_spawn

posix_spawn returns error codes through its return value,
not through errno.
Fix SIGCHLD being masked for child processes on Linux

By default, children created with posix_spawn inherit the
signal mask from their parent.  On Linux, B was masking
SIGCHLD.  This caused SIGCHLD to be masked in the child,
leading to problems when invoking e.g. the GCC driver.

This patch tells posix_spawn to create the child with an
empty signal mask.
Rename variable

Rename 'opaque' to 'dispatch_callback_opaque', making it
more clear that 'dispatch_callback_opaque' and
'dispatch_callback' are related.