Intern commits/authors/paths in blame region lists

This saves some storage space both in the in-memory cache and in
alternative persistent cache backends, at the cost of a little more
processing during construction. Considering how expensive blame
already is, this is a fair tradeoff.

Make sure the result is serializable to aid in the construction of
such persistent caches.

Along with a rewrite of the blame loop comes a slight behavior change:
adjacent blame regions from the same source (i.e. with deleted
intervening lines) are no longer squashed.

Change-Id: I031c758f5beb09453c9e2b998b3b09503ec1f70d
2 files changed