Simplify worker and make sure SIGNAL can stop loop

Remove the foreach() call, SQS will handle this in a separate
method. The stop condition is also put at the top, so when no job
is returned, the loop continues to check for an external stop
condition.