Handle multi-component cache versions - Let `UnusedVersionsCacheCleanup` handle cache versions with multiple components, e.g. metadata-2.58. - Introduce `CacheVersion` to handle formatting and parsing in one place.
Introduce CacheVersionMapping Instead of just having a constant for the latest, currently used cache version, we need to keep track of which cache version is used by which Gradle version. This way, we can determine which shared cache directories are safe to delete because there is no Gradle version that uses it anymore.