Poor man's lambda functions.

Refactored functors a bit to resemble lambda functions more closely.
Does not bring anything useful, only beauty.
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.