Only include targets in generated schemes when they're related to the workspace being built.

Summary:
Before, if an unused target was included in a project included in the workspace,
then it would be included in the scheme. That could break builds if the target
had dependencies that weren't also included in the scheme.

Now, they are only included in the scheme if they are "related" (see RuleDependencyFinder)
to the workspace Buck rule being built.

Test Plan: Generate workspace / scheme, confirm it now builds even if unrelated targets are in BUCK files.
Support for variant paths in project generator.

Test Plan:
Generate an Xcode project with a variant path resource,
compare with Xcode native generated PBXVariantGroup.
Make the src.zip generated by genaidl have a lower-case suffix.

Summary: Also make the GenAidlDescription return a GenAidl rather than just a Buildable.

Test Plan: buck test --all
De-dupe some code.

Test Plan: buck test --all
Speed up buck targets by not sorting transitive android resource deps.

Test Plan:
buck test --all
In fbandroid, time buck targets > /dev/null 2>&1
Before: ~41 seconds
After: ~29 seconds
Bash escape the empty string to "''".

Summary:
When running `buck test --all -v 2`, I noticed that the command printed
to the console was not copy-pasteable. Because the second argument to
`com.facebook.buck.junit.JUnitRunner` is often the empty string, it was
was not being printed to the console as part of the command, which is
why it could not be copy-pasted.

Test Plan:
Updated `EscaperTest`.
Copy-pasted the `java` command to run a test as produced by
`buck test --all -v 2` and verified that it worked.
Delete a build rule's metadata directory when it fails to build.

Summary:
A concrete failure case was reported in the wild:
https://github.com/facebook/buck/issues/109.

Test Plan:
Very straightforward repro base:
* Build a GWT app, verify the .zip file is generated.
* Introduce a breaking change and try to rebuild the GWT app.
* Verify that the .zip file, `metadata/RULE_KEY` and `metadata/RULE_KEY_NO_DEPS` files are deleted.
* Revert the breaking change so it matches the original rule key.
* Build the GWT app again.
* Verify that the .zip file, `metadata/RULE_KEY` and `metadata/RULE_KEY_NO_DEPS` files are restored.
Also ran `buck test --all` locally and verified that all tests passed.