The in-memory cache for GitLab project metadata (used to populate
chunk metadata) was keyed by the raw HTTPURLToRepo on write but by the
normalized repo URL on read, so cache lookups almost always missed and
the underlying map grew unbounded.
Replace the map with an expirable LRU cache (15,000 entries, 1 hour
TTL) to bound memory usage, and consistently use the normalized repo
URL as the cache key on both writes and reads, including normalizing
before cloning in ChunkUnit so the git remote URL used for metadata
lookups matches the cached key.