Introduce a `JAVA_API_JARS` usage This commit introduces a new `JAVA_API_JARS` usage, mirror to the `JAVA_RUNTIME_JARS` usage. This is both for consistency, and to make sure that the `JAVA_API` and `JAVA_RUNTIME` usages are limited to cases where the consumer doesn't care, or when a producer doesn't have a more specific usage to provide.
This is, for example, the case for Java platforms. It's worth noting than in case a producer mixes both "generic" usages and "specific" usages, selection is likely to produce unexpected results, because of disambiguation rules.
The Java disambiguation rule has been simplified and now supports more cases.
Disambiguate variants when one strictly matches requested capability Whenever several variants provide the requested capabilities, we may fail with an ambiguous selection error. However, in the list of candidates, there may be a variant that _exactly_ matches the requested capabilities. This commit upgrades the selection algorithm to prefer this variant.