adjust Scheduler timeout logic

Timeout starts when task submission is attempted. That is, it starts *each time* in resubmit / retry cases.

Avoids issues of timeout firing only once while a task is pending, when it might come back and be retried after the timeout has fired.

Also adds a ten second timeout for `sync` calls in the tests, which should hopefully avoid hangs when things are misbehaving.