Be more tolertant towards missing image manifests
Before this change, we only accepted image repository metadata if a manifest was
present for all image tags (which is to be expected without inconsistencies).
However, enforcing fully consistent repository is a bit too strict, since:
1. Popular repositories may actually miss tag manifests (e.g. `bitnami/redis`),
which has been broken for months.
2. Users may not be able to enforce such consistency.
3. The offending image tags can be ignored if filtered out by container
image annotation patterns.
This change allows for the repository cache warmer to accept partial repository
information. Consistency is only enforced after tags are filtered by the
container image pattern annotations.
In particular, this change adds:
* A new storage format in the repository cache, splitting the information into
tags and image metadata.
* More tolerance towards tags missing metadata when listing images (e.g. `fluxctl list-images`).
* Tolerance towards tags missing metadata during auto-releases, provided that
those tags are not matched by container image pattern annotations.
It's worth noting that we can do better for `semver` patterns, since they don't
depend on image metadata for sorting (just on the tags themselves). `semver`
patterns could tolerate tags without metadata, even after filtering. This
however, is not provided by this change.