Dedups property keys when migrating from older format

The Kernel API assumes only a single name -> id mapping for property keys,
but stores prior to 2.0 might have property keys with more than one id
attached to it. Up until now 2.0 have prevented that from happening, but
haven't removed those duplications in the migration process, so there
might be upgraded 2.0 stores with this problem still. To guard for that
the property key token "holder" has got functionality for returning all
tokens for any given name if there were more than one. This commit also
removes that extra functionality so that there's no way that duplicates
can exist or be read anymore.

Migration will now compact the property key store since the property store
will have to be scanned and updated with property key dedupings in
migration anyway.

Also cleans up around Token classes and holders. Added one Token class
that represents name+id and use it almost everywhere
instead of separate duplicate token classes. Also makes TokenHolder manage
Token or subclasses thereof for simplifying its implementation and
reducing need for subclassing it.
Merge pull request #799 from tinwelint/2.0-unique-propkey-migration

Dedups property keys when migrating from older format