Moved responsibility for creating and wiring up the 'create' task for a static library to `NativeBasePlugin` from the language specific base plugins.Introduced abstractions to represent a component that produces outputs for a native platform and a component that produces object files.
Moved and renamed some classes so that `org.gradle.language` contains only those types that are domain and language agnostic. Moved types that are native domain specific to `org.gradle.language.nativeplatform`.
Moved responsibility for wiring up the `assemble` task to build the development binary out of the various specific plugins and into the `NativeBasePlugin`.Added abstractions to represent an installable component, a linkable component and a component with runtime files and use these to communicate between the specific plugins and the base plugin.
Added a factory for plugins to use to create native component instances. This currently is internal but may later move to the public API.Using the factory decouples the plugins from the services used by the component implementations.
Introduced a native language base plugin, to reduce some duplication of logic across the various native plugins. This plugin doesn't do anything much at this stage.Added an interface to represent a native component that has binaries. The native base plugin takes care of registering the binaries of a component in `project.components` rather than have each plugin know that it has to do this.