Add a Repository module

Rework Details and TomcatDetails in terms of
Repository::RepositoryIndex.

Improve the interface to DownloadCache. Avoid the need to pass in a
separate key which means that the cache is more easily reused without
having to pass keys around.

Improve the diagnostics for OpenJdk.

Abstract common details into Repository::ConfiguredItem

Delete some support for system.properties in the process.

Normalise VersionResolver parameters. The version specified on resolve
must be a TokenizedVersion or nil.

Split out some VersionResolver tests into TokenizedVersion tests.

[#51720657]
Merge branch '51720657-repository-refactoring'

[Completes #51720657]