Implement observer pattern for database's tasks

https://github.com/cs2103aug2014-f11-3j/main/issues/108

Why is this change necessary?
- GUI may want to persistently show all tasks stored in database, and
  this list of tasks needs to be updated whenever there are changes to
  tasks, e.g. task addition, deletion, edition.

How does it address the issue?
- Having an observer pattern to update tasks shown by GUI preserves
  navigability, i.e. GUI is aware of database, but database is not aware
  of GUI.
- GUI may not be aware when tasks stored in database change. In this
  observer pattern, the onus of updating GUI tasks lie in database, and
  database can automatically update GUI whenever database's add, delete
  and edit methods are called.
- Allows for more than one observer to subscribe to task changes
  elegantly.

What side effects does this change have?
- Logic and GUI will need to subscribe for task changes by adding
  themselves to database's observer list, as well as implement their
  update methods to pull database's tasks.
Merge branch 'master' of https://github.com/cs2103aug2014-f11-3j/main

Conflicts:
	log