Use job object when taking from the queue

This uses a job object when calling `Queue.take()`, instead of
calling out to Redis directly. Additionally, a `Job.progress()`
method has be stubbed out.