Move datatype dependencies away from SyncClient

We do this by introducing another layer, BrowserSyncClient, to minimize
the code changes.

Even in this humble form, the change substantially improves layering and
already fixes some important issues like forward declarations being used
to avoid build dependencies that would otherwise cause dependency cycles.

The downside is that some extra boilerplate code is required to avoid
dependencies selectively, as opposed to SyncClient being used as a big
convenience bundle. This is arguably an improvement, though.

In future patches, we should probably get rid of this new class
altogether, but that requires more intrusive changes.

Bug: 915154
Change-Id: Iaad6d54272bb1ccc00759ad039b313896acd4e34
Reviewed-on: https://chromium-review.googlesource.com/c/1458196
Reviewed-by: Sylvain Defresne <sdefresne@chromium.org>
Reviewed-by: Sebastien Seguin-Gagnon <sebsg@chromium.org>
Reviewed-by: Marc Treib <treib@chromium.org>
Commit-Queue: Mikel Astiz <mastiz@chromium.org>
Cr-Commit-Position: refs/heads/master@{#630710}
64 files changed