Refactor cache builder

Refactor interactions between CacheBuilder, Works and CacheManager

CacheManager now hides the details of how it manages (add/remove) the
cache. Workers no longer reach in to the CacheManager to
add/remove/diff.

Knowledge of whether the cache is stale lives only in the CacheManager,
not in the workers.

The Workers now act as a Repository layer and are only a data source
used by CacheManager.