Feature/exits for real

The use of exit! for exiting from a worker job prevents at_exit hooks to be processed. This new implementation makes use of a block instead of the double return fork model to ensure propper exit.