Report deleted and skipped cache entriesThis commit introduces `CleanupProgressMonitor` and a default`ProgressLogger`-based implementation that tracks the total number ofdeleted and skipped cache entries. `CleanupAction.clean()` now takes amonitor as an additional argument. `DefaultPersistentDirectoryStore`creates the default implementation and passes it to its `CleanupAction`.
Implement cleanup of shared versioned caches`UnusedVersionsCacheCleanup` now extends `AbstractCacheCleanup` to reuseits timeout checking and to make it usable as a `CleanupAction` for a`PersistentCache`. `CompositeCleanupAction` now allows to use multipletop-level `CleanupActions`.
Enable incremental cache cleanupInstead of computing the complete list of eligible files at once,SingleDepthFileFinder now returns an Iterable that creates anIterator that will incrementally walk the file tree.In addition, the CleanupAction.clean() operation now takes aCountdownTimer and implementations periodically check whether the timerhas expired. If so, the current cleanup will be aborted.DefaultPersistentDirectoryCache now uses a timeout of 20 seconds whichis well below the file locking timeout of 60 seconds.The marker file (gc.properties) will only be updated if the completecleanup was able to finish without expiring the timeout.