Use the quick exit path on failed execve().

Previously, when an isolate failed to execve() a new worker process, it
terminated the execution of the current forked process with std::exit().
It appeared that because std::exit() invokes the destructors of static,
automatic and thread-local variables, ZeroMQ context object managed to
close its parent process sockets (or do something similiarly bad), which
triggered various asserts in the ZeroMQ core.
Poor man's lambda functions.

Refactored functors a bit to resemble lambda functions more closely.
Does not bring anything useful, only beauty.