Add a method to `Task` to allow runtime registration of the services that the task will use. This is intended really just to be a placeholder for some kind of API where the usage can be declared.
Remove the `requiresResource()` methods from `AbstractTask`. In particular, remove the ability to express "how much" of the resource the task will use. For now, assume that usage by each task has equal weight.
Merge 'shared resources' into 'build services', so that each service can optionally have a maximum number of concurrent usages defined. When scheduling tasks, Gradle will not start a task that uses a build service when there are already the maximum number of tasks already running for that service.