[DeviceSync v2] Add CryptAuthMetadataSyncer class

Handles the SyncMetadata portion of the CryptAuth v2 DeviceSync
protocol, which consists of one or two SyncMetadata request/response
interactions with the CryptAuth servers.

The output of a successful flow is:
- A map from Instance ID to DeviceMetadataPacket, which contains device
  metadata encrypted with the group public key.
- (Optional) A new group public and private key created by the client or
  a new group public key provided by CryptAuth.
- (Optional) A group private key, encrypted with the local device's
  CryptAuthKeyBunde::kDeviceSyncBetterTogether public key.

Neither the device nor key registries change; all relevant data is sent
as callback parameters.

Verified 100% code coverage aside from different flavors of network
request errors.

Bug: 951969
Change-Id: I54c4a3afd72d751e7dc95545ac64ce9f811d939b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1703070
Reviewed-by: Kyle Horimoto <khorimoto@chromium.org>
Commit-Queue: Josh Nohle <nohle@chromium.org>
Cr-Commit-Position: refs/heads/master@{#678879}
8 files changed