Allow get_task() to return non-pending tasks.

Currently, the get_task() method only evaluates pending tasks. When provided a UUID, however, I would suggest that non-pending items should also be evaluated. This would allow task_update() to modify completed tasks, as supported by TaskWarrior.

The specific use case I have in mind involves a two-way sync between a local and upstream source. For example, this change would allow the ability to set a 'completed' task to 'deleted' or otherwise modify its state, such as adding tags, changing its project, or updating its description.

This would come with some caveats:

- The semantics of get_task would change; this may violate expectations of the existing API. I would suggest that when `key != id`, non-pending tasks should be expected (as with TaskWarrior).
- The task_update() method would, ideally, change accordingly to evaluate the current status of a task. This may, perhaps, be accomplished through indirection of the task's current status.
- The task_done() method would require an extra invariant to enforce proper state transition.

If this change seems viable and useful, I would be willing to create a patch.