Implementation for provided and optional

* Introduces a `provided` configuration.
* Introduces an `optional` attribute.
* Handles configurations for publishing to Ivy and Maven repos.
* Added unit/integration tests.

This should probably become a "regular" Gradle plugin. At the moment there's no direct dependency on another Nebula plugin.
We've had a lot of problems with ordering issues, and lines like this caused the publication to not be available to other mechanisms we use. I have my doubts we'll be able to use this, vs what we do in the Publishing plugin.  Maybe the publication plugin needs a review, but until then I'm not confident this will work for us. Let's see if we can test this in our internal infrastructure to be sure.