Fix broken job restarts after failures

Fixes #115 

When a job fails, the snapshot of the DAG is deleted, just like during completion. When we retry, the snapshot is not recreated, causing errors when trying to reach the next task after the failed tasks.

The fix is a simple one line addition to recreate the snapshot at the beginning of retry() and add a test case that tests this particular use case.
This isn't blocking since we need to get this release out, but why is the retry loop necessary? Is a single 1 or 2 second sleep not enough for the job to reliably run and fail?