This component contains the base classes for the metrics service and only
depends on //base. It is used by ChromeOS as the base for a standalone service
that will upload the metrics when ChromeOS is not installed (headless install).

This is the first step towards the componentization of metrics that will happen
later this spring.

A proposed structure for the metrics component is:
//components/metrics/base,
  Depends on base only. Contains the protobuf definitions.
//components/metrics/core
  Depends on everything iOS depends on
//components/metrics/content
  Depends on content

Ideally, the component would abstract the network stack and have a clean
separation between the metrics upload logic (protbuf generation, retry, etc...),
the chrome part (gathering histogram from all the threads, populating the
log with hardware characteristics, plugin state, etc.).

It is a plus if the code currently in the component (i.e., the code that can
depend only on //base) stays in a single directory as it would be easier
for ChromeOS to pull it :).
