Remove unsafe handling of variables between different go routines

* Stop the stall timer instead of resetting after the execution completes
* Added another channel to handle the *actual* start time of a job. This channel is populated when the task starts executing and we drain it after the execution is over. In case of a stall the stall will drain it to get the beginning time og the task. In case of race condition of the two drainers (stall, execution finish), if the extra condition (stalledAt - startedAt >= Timeout) then it is a real stall otherwise not.