Refactor common invalidation framework types

Convert the Invalidation struct into a class.  This allows us to hide
its members, so we can do things like add a DCHECK to make sure we never
access the payload field of an unknown version invalidation.  It also
lets us use factory methods and constructors to initialize it rather
than having to initialize its fields one by one.

Convert the ObjectIdInvalidationMap from a typedef into a class.  Unlike
the typedef, the class supports multiple invalidations for the same
object ID.  It uses the newly introduced SingleObjectInvalidationSet to
manage the set of invalidations belonging to a particular ID.  Note that
the current code still sends only one invalidation per type; that will
be changed in a future commit.

The end goal of this refactoring is to make these classes smarter so
they can help manage the complexity that will be introduced when we
implement invalidation 'trickles' support.

Note that this commit changes the on-disk format for invalidations, so
any invalidations currently stored in the profile may be lost on
upgrade.  There should be no other notable changes to invalidations
behavior in this CL.

TBR=brettw
BUG=233437

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

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