Add ability to specify 'end' time on task closure.

When integrating with an upstream source, a task's end attribute may
need to be retained. An 'end' kwarg may be passed into task_done(),
allowing for a custom end time. When not passed, original behaviour is
retained.

This patch introduces a change in the get_task() implementation to allow
for pass-through kwargs arguments. This changes the method semantics in
a subtle way: the method is no longer constrained to one argument;
rather, it is constrained to one *ID* argument and an arbitrary number
of other arguments.