feat(Task): implement Comparable<Magic8Task>
feat(TaskList): update TaskList

Change the following methods to return boolean instead of Magic8Task
- addTask
- removeTask

Add more queries
- getTimedTasks
- getUntimedTasks
- getTasksWithWord (without boolean parameter)
- getTasksWithTag

Change queries to return tasks sorted by end time

Rewrite queries to return newly created defensive copies

Rewrite undo/redo using deques
Merge branch 'TaskList'