[caldav] Add NotebookSyncAgent and change the sync operation flow.

The syncing for each notebook is now done by NotebookSyncAgent. Once
all notebook syncs are completed, CalDavClient saves the storage and
emits success().

The following steps are performed when doing a quick (i.e. update-type)
sync:

1) Get all remote calendar etags and updated calendar data from the
   server using Report::getAllETags()
2) Get all local changes since the last sync
3) Filter out local changes that were actually remote changes written
   by step 5) of this sequence from a previous sync
4) Send the local changes to the server using Put and Delete requests
5) Write the remote calendar changes to disk.

Steps 1-4 are done by each NotebookSyncAgent. Step 5) is triggered by
CalDavClient once all notebook syncs have finished.

The Report class no longer writes any incidences changes; this is now
done by NotebookSyncAgent.