Add more thorough input validation for editing tasks

Tasks can't be updated if no fields have changed, and the option
to "undo" changes is also only avfailable if anything actually
changed.

TaskView now gets its data from a TaskModel instead of re-implementing
all of the getters and setters that are in TaskModel. This makes it
way easier to detect if any changes have been made by the user, and is
more maintainable as we add more fields to TaskModel.

Change-Id: I7f2838deca3b1f947d98609874c5fa37c65d9a89