Introduce ecosystem registration This commit introduces the concept of "ecosystem", that can be registered on an attributes schema. When a component is published, it may provide a list of ecosystems. This list is used by consumers when resolving. If, for some reason, variant resolution fails, and that the consumer didn't use a plugin which provides the expected ecosystem, the error message will indicate that they probably miss a plugin that understands that ecosystem.
This is useful when a plugin extends an existing ecosystem with additional attributes, that consumers may not be aware of. In this case it is expected that the plugin declares an ecosystem.
Currently the error message will only indicate what ecosystem is missing, and an optional description. It will not tell _how_ such plugin can be found, nor what plugins provide it.
By default, for adhoc components, publishing will use the ecosystems of the producer. For example, for a Java project, the published Gradle metadata file will include the java ecosystem requirement.
For components which are not adhoc, they must implement the `ComponentWithEcosystems` interface in order to tell which ecosystems are in use.