Number of improvements

Couple of improvements and fixes for the Task object:
* done and delete operations should not be executed on tasks with invalid states
* uuids should be used instead of ids, since ids are not unique across all tasks
* added NotSaved, TaskCompleted and TaskDeleted exceptions, which are raised when operation failed due to these reasons
* makes Task(tw, desc="random task").save() working
* covers the functionality with tests
* adds detection for Taskwarrior to the TaskWarrior object (and uses it for workaround)