A uniform way of expressing Task and Subsystem dependencies.
Review Request #2653 — Created Aug. 18, 2015 and submitted
Introduces the concept of a subsystem client, which Task and Subsystem mix in (this is not in Optionable because the GlobalOptionsRegistrar must not depend on any subsystems). All subsystem dependencies are expressed by the client by implementing subsystem_dependencies(). That dependency consists of a subsystem type and a scope. This generalizes the previous concept of global and task-specific subsystem dependencies. Contains a temporary hack so that the old declarations still work. Those will be mopped up in a followup change, just to keep this one from spiraling out too much. Issue: https://github.com/pantsbuild/pants/issues/1957
CI passes: https://travis-ci.org/pantsbuild/pants/builds/76136929.
Thanks for the reviews John and Garrett!