Introduce ChromeZoomLevelPrefs, make zoom level prefs independent of profile prefs.

This CL splits the management of zoom level prefs (per-host
zoom levels and default zoom level) out of the profile
prefs and into its own class, ChromeZoomLevelPrefs. This is
in preparation for moving zoom-level prefs into StoragePartition so that WebViews and Apps can manage them
separately from the main browser.

Note that while the new zoom level prefs are still stored
in the profile prefs, default_zoom_level becomes a
Dictionary of doubles, instead of being a single double.
This is needed since now each StoragePartition will
have its own default zoom level. Similarly, per-host zoom
levels is now a Dictionary of Dictionaries, with each
StoragePartition having its own set of per-host zoom
levels.

This CL includes code that detects legacy profile zoom
preferences, and migrates them to the new mechanism,
clearing the legacy values once the migration is complete.
This mechanism will be removed (at least) one
full milestone after the new zoom preferences go stable,
when analysis of the migration statistics suggests that most users have had their preferences migrated.

BUG=335317

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

Cr-Commit-Position: refs/heads/master@{#299559}
29 files changed