First stab at implementing finaliser tasks. Dependencies of finaliser tasks are for now ignored.
Also handle dependencies of finaliser tasks
Make build dashboard task a finaliser for reporting tasks
Run finaliser tasks as soon as possible
Mock a task method to fix some tests
Docs for finaliser task and the missing setter for finalisedBy
Fix setter for finalisedBy and add a test for it.
Use US spelling for 'finalize'
Add finalizedBy edges to task graph so that finalizer dependencies are traversed only once
More extensive integration tests for finalizer tasks
Reduce number of task graph traversals, remove implicit mustRunAfter for finalizer tasks.
Changed `ModuleVersionRepository.resolve()` to accept a Gradle `ArtifactIdentifier` instead of an Ivy `Artifact`.
Introduced ModuleVersionPublishMetaData, to package up the meta-data required to publish. This is a possibly temporary type to detangle publisher from Ivy types.
Changed ExternalResourceResolver so that it implements ModuleVersionPublisher directly, rather than treat it as a DependencyResolver that can publish.
Added some more coverage for ivy configuration mapping expressions.
Added ModuleVersionPublishMetaData.getModuleDescriptor() and merged the implementations.
Changed ModuleDescriptorConverter.convert() to return a Gradle ModuleVersionPublishMetaData instead of an Ivy ModuleDescriptor.
Fixed the problem with with testRuntime and testCompile configurations resolved eagerly, even when no tests were present.

1. Added @SkipWhenEmpty annotation where needed. Removed @Input annotation because it didn't add any value. Fixed the integration tests.
2. This change may improve performance and heap consumption of certain builds (large multi project builds with little tests).
REVIEW-2455 Tweaked the javadoc to reflect the recent changes.
REVIEW-2455 Injection of the executor factory. Technically, it's not injected ATM, as there doesn't seem to be a good reason.