Add `IOSLibraryBuildRule`.

Summary:
Skeleton build rule for ios library targets, to be used for project
generation in a later diff.

Test Plan:
Not much to test here, checked that it builds, and existing tests pass.

```
buck build //src/com/facebook/buck/apple:rules
buck test --all
```
Add `IOSTestBuildRule`.

Summary: This adds a representation of an iOS test target.
Fix Xcconfig parser grammar.

Summary:
This diff updates the parser to accept two additional inputs:

- Conditions with just a `*`, denoting all values (equivalent to not
  specifying). ex. `X[cond=*]`
- Values with unbalanced parens. Ex. `X = Hello (or goodbye)` or
  `X = FOO) bar } baz))) $(WHEE)))}}}}}`

Restructured the parser a bit to accommodate the second change, namely
- Values and interpolations now return `ImmutableList` or `TokenValue`,
  instead of modifying a passed in builder.
- Simplified parser for conditions so that keys are more lenient (and
  can contain same values as condition values)

Test Plan: Additional unit tests.
Add `IOSBinaryRule`.

Summary: This adds a representation of an iOS Binary target.
Fix bug in contents of metadata.txt file for secondary dexes.

Summary:
I assume this was working without failure since fb4a would check if the same
class was being loaded successfully by DexClassLoader.

Test Plan:
`buck build fb4a`
Manually inspect the metadata.txt file in the final APK and verify that the
contents are correct. Also, verified that there were redundant class name
entries in the APK without this fix.
Allow logging an error on `BuildContext` without a `Throwable`.

Summary: Will be used by a subsequent diff.
Update IntelliJ style.

Summary:
This will make IntelliJ put one parameter per line when it wraps a
method.
Fix description of `AccumulateClassNamesStep`.

Summary: This was showing up with "Optional" in the name.

Test Plan:
Ran a -v2 build in the quickstart app and saw nicer strings for
`AccumulateClassNamesStep`.
Add `getBinPath` and `getGenPath` to a helper class.

Summary:
There was a lot of copypasta floating around.  This cleans a lot of it
up.

Test Plan:
Did clean, uncached build of fb4a debug and release before and after
this change. The list of files under buck-out/gen and buck-out/bin were
unchanged (except for one that is benign unrelated).
Make formatting more uniform in `AndroidBinaryGraphEnhancer`.

Summary: This makes it match the other `buildAndAddToIndex` calls in this file.
Clarify some dexing code in `AndroidBinaryRule`.

Summary:
- Made the pre-dexed split-dex case the second case in this
  if/elseif/else block instead of the third, so the first two are the
  shortest (since they both just call out to helper functions).
- Clarified the comment now that we do use SmartDexingStep in pre-dex
  builds.
Fix `buck targets --show_output`

Summary:
This wasn't checking for null, so we were getting NPEs when running it
without an argument.

Test Plan: Ran `buck targets --show_output`.
Speed up `buck targets` with a specified rule.

Summary:
Previously, we were always parsing all BUCK files in the tree, which was
slow.  Now, if a target is specified, we only parse its deps.

It might be possible to unify `createPartialGraphIncludingRoots` and
`createPartialGraphFromRoots`, but I didn't want to break buck project.

Test Plan: `time buck targets --show_output fb4a` is faster.
Add `buck targets --show_rulekey`.

Summary:
Previously, I don't think there was a fast way to get the RuleKey of a
rule from the command line.  This is reasonably fast.

I can't figure out why it always shows debug output, but it's not that
important, since this fills my needs.

Test Plan:
Ran it on fb4a to verify that a particular change didn't affect the fb4a
rulekey.
Add `BuildRuleParams.copyWithChangedDeps`.

Summary:
Previously, in order to make a copy of a `BuildRuleParams` with a
different set of deps, we had to invoke the normal constructor and pass
the right value to each parameter.  This is risky, because if someone
created a new constructor with an extra argument and made the old
constructor delegate to the new one with some default value, then these
"copies" would now have the default value for that parameter, rather
than copying it.

This introduces `copyWithChangedDeps`, which lives right next to the
constructor, to perform this operation.  If someone adds a new
constructor now, hopefully they'll notice to update this method.

Test Plan:
RuleKey for fb4a doesn't change.
Rename `unsignedApkPath` to `signedApkPath`.

Summary:
`ApkBuilder` used to produce unsigned apks, but now it signs them.  Update
this parameter to reflect that.
Reorder arguments to `mergePreDexed`.

Summary: This collects the "out" parameters at the end.
Separate apkbuilder steps from final dexing steps.

Summary:
Previously, these were added by `addDxAndApkBuilderSteps` in
`AndroidBinaryRule`.  For external dex builds, I'm going to need them to
be in separate rules, so this starts by pulling them into separate
methods.

Test Plan:
RuleKey for fb4a doesn't change.
Clean up totalDeps handling in `AndroidBinaryGraphEnhancer`

Summary:
Previously we were passing `preDexDeps` to
`addBuildablesToCreateAaptResources` so it could add them to the
`totalDeps` returned from the `AndroidBinaryGraphEnhancer`.  I need to
eliminate that because I need to set up the dexing steps after the aapt
steps (so they can reference R.java).

Now, we maintain an `ImmutableSortedSet.Builder` for `totalDeps` and
allow both dexing and aapt to add to it.

Test Plan:
RuleKey for fb4a doesn't change.
Move `buildTargetsToExcludeFromDex` in graph enhancement.

Summary:
Previously, this was passed to the constructor of
`AndroidBinaryGraphEnhancer`, but only used in `createDepsForPreDexing`.
Move it to a parameter of that function.  This slightly simplifies
`AndroidBinaryGraphEnhancer` and `AndroidInstrumentationApk` (which
doesn't do pre-dexing).

Test Plan:
RuleKey for fb4a doesn't change.