model: make Task immutable
model: make Task immutable

Making objects immutable is a good thing because we can be sure that if
we have a reference to an object, the data in the object will never
change.

For the case of Task, we are going to have hundred, if not millions of
these instances in a Task Book. Having to wonder at all times if the
data stored by these task objects may be mutated is the surest path to
insanity.

This does not mean that users won't be able to edit tasks. We just need
to create a new Task object with the modified data, and then replace the
old task object in the task book with the new one. Even though the
objects are different, from the user's perspective it would seem as if
the task was edited.

nightism/addressbook-level4,snehasp13/main,nightism/addressbook-level4,CS2103AUG2016-T11-C4/main,snehasp13/main,CS2103AUG2016-T11-C4/main