First cut of "Software Component" support:
- SoftwareComponent represents something that is built by a project
- Project has a container of SoftwareComponent instances
- Java plugin adds a JavaLibrary component to the set of software components
- SoftwareComponents are not currently used anywhere
Updated 'maven-publish' plugin so it publishes SoftwareComponents
- Published artifacts are simply artifacts declared by component
    - Artifacts from the 'archives' configuration are _not_ published automatically
- Runtime dependencies are as declared by component
    - Published pom now includes all runtime dependencies in 'runtime' scope
Extends pom customisation test to tweak all project-coordinate values
Checkstyle and unit-test fixes