Added logic and tests for handling job updates and timeouts.

Also made some tweaks to timeutils to allow simulating a sequence of datetimes so the worker could be stepped through a few different updates. Might be useful in other situations e.g. compressing time for testing.