SyncFS: Cleanup sync flow and how to finalize sync

Current local and remote sync flow has evolved in
an ad-hoc fashion due to tough time scheduling, and is
hard to understand because lack of symmetricity.
This change tries to cleanup the sync flow.

== Before this change ==
* Local Sync:
- SyncService calls Local::ProcessLocalChange() to start sync
-- LocalService internally calls PrepareForSync(SYNC_SNAPSHOT) to start sync
--- <sync>
-- LocalService internally calls CommitChangeStatusForURL(url) to finalize sync
- SyncService calls Local::ClearSyncFlagForURL() after sync's done

* Remote Sync:
- SyncService calls Remote::ProcessRemoteChange() to start sync
-- RemoteService calls Local::PrepareForSync() to prepare for sync
--- LocalService internally calls PrepareForSync(SYNC_EXCLUSIVE) to start sync
-- RemoteService calls Local::ApplyRemoteChange() to apply remote change
--- <sync>
-- RemoteService calls Local::ClearChangesForURL(url) after sync's done
- SyncService calls Local::ClearSyncFlagForURL() after sync's done

== After this change ==
* Local Sync:
- SyncService calls Local::ProcessLocalChange() to start sync
-- LocalService internally calls PrepareForSync(SYNC_SNAPSHOT) to start sync
--- <sync>
-- LocalService internally calls FinalizeSnapshotSync() to finalize sync

* Remote Sync:
- SyncService calls Remote::ProcessRemoteChange() to start sync
-- RemoteService calls Local::PrepareForSync() to prepare for sync
--- LocalService internally calls PrepareForSync(SYNC_EXCLUSIVE) to start sync
-- RemoteService calls Local::ApplyRemoteChange() to apply remote change
--- <sync>
-- RemoteService calls Local::FinalizeRemoteChange(url) after sync's done
--- LocalService internally calls FinalizeExclusiveSync() to finalize sync

Which means:
- Calling ProcessLocalChange() / ProcessRemoteChange() needs no post clean-up
- PrepareForSync() must be finalized by Finalize{Snapshot,Exclusive}Sync()

Hopefully the new flow is clearer.

BUG=none
TEST=unit_tests:*Sync*,manual

Review URL: https://codereview.chromium.org/25724005

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@226971 0039d316-1c4b-4281-b951-d872f2087c98
SVN changes up to revision 226971