Added a public interface that a `SoftwareComponent` implementation can use to describe its variants. In this change, this interface is used only as a marker interface. When present on a component contained in a publication, the `maven-publish` plugin will generate a Gradle specific metadata file for the publication describing the component. The metadata file doesn't contain anything particularly interesting nor is it used during dependency resolution yet. This change does not add any public way to implement the interface.