Add ChangeCache implementation to scan changes from git

The purpose of ChangeCache is to resolve a project name to a list of
changes. This is a natural location for the scanChanges implementation
we added to SiteIndexer. However, most users in a running server will
still just want use the secondary index lookup, as it's faster. So we
extract an interface and provide two implementations.

Change-Id: I66c24b337cdc6aa787f450f8e0b2dfa17b0cdf97
8 files changed