Added a SchemaMap.

A Schema defines the expected types of policy values. A SchemaMap maps an
identifier to its Schema. This identifier indicates which component is the
Schema for (e.g. the browser, or an extension).

This class will supersede the PolicyDomainDescriptor, which will be removed.

This class is refcounted so that any thread can work with the schemas (i.e.
a background worker can use Schema data to load the corresponding policies),
and is immutable. Updated version must make a copy of the map, modify it, and
be published as a new SchemaMap. This is handled by a subsequent component.

BUG=270667
R=bartfab@chromium.org, dconnelly@chromium.org

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

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

A Schema defines the expected values of known policies. Schemas are stored in
SchemaMaps, which map an identifier to its Schema. The new SchemaRegistry owns
the "current" version of the SchemaMap, and allows observers to be notified of
updates. This allows SchemaMaps to be refcounted and live in different
background threads, which a control component observes the registry and
forwards the updated version.

Also introduced a CombinedSchemaRegistry, which merges the maps from a
collection of registries. This allows the observer to see all the Schemas
defined by the tracked registries.

BUG=270667
R=bartfab@chromium.org

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

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