app_sync: Implement feature to transfer app attributes.

This allows to transfer attributes (position, pin position and folder
id) from one app to another app. This is to be used in case one app is
migrating to another app and it is needed to preserve positions in
shelf and app launcher. It is particular needed for migrating messages
app.

Usage example:
  app_list::AppListSyncableService const * app_service =
      app_list::AppListSyncableServiceFactory::GetForProfile(profile);
  app_service->TransferItemAttribute(kAppId1, kAppId2);

BUG=TBD
TEST=Manually for both modes. In one mode transfer attribute to the
existing app and app immediately moved to the position in shelf and
position and folder in App Launcher. Did the same but for non-existing
app that was installed later. Unit test added.

Change-Id: I00343e0acc0744b3f22bac0963f74cc14701e8fe
Reviewed-on: https://chromium-review.googlesource.com/c/1396937
Commit-Queue: Yury Khmel <khmel@chromium.org>
Reviewed-by: Kyle Horimoto <khorimoto@chromium.org>
Reviewed-by: Steven Bennetts <stevenjb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#620975}
3 files changed