Refactor CommandLineBuildTargetNormalizer to use pass-from-above.

Summary:
`CommandLineBuildTargetNormalizer` is constructed lazily by and made available through
`AbstractCommandOptions`.

This diff also deletes `BuildTargetNormalizer`, which apparently was unused.

This reduces the number of `Function` objects that need to be created.
This will make it simpler to add a normalize() method that takes a
single string, which will be done in a follow-up diff that uses it.

Test Plan: Sandcastle builds.
diff --git a/src/com/facebook/buck/cli/AbstractCommandOptions.java b/src/com/facebook/buck/cli/AbstractCommandOptions.java
index e01aab6..fa5fca2 100644
--- a/src/com/facebook/buck/cli/AbstractCommandOptions.java
+++ b/src/com/facebook/buck/cli/AbstractCommandOptions.java
@@ -34,6 +34,8 @@
 import java.util.Properties;
 import java.util.StringTokenizer;
 
+import javax.annotation.Nullable;
+
 public abstract class AbstractCommandOptions {
 
   @VisibleForTesting static final String HELP_LONG_ARG = "--help";
@@ -62,6 +64,9 @@
 
   private final BuckConfig buckConfig;
 
+  @Nullable // Lazily loaded via getCommandLineBuildTargetNormalizer().
+  private CommandLineBuildTargetNormalizer commandLineBuildTargetNormalizer;
+
   AbstractCommandOptions(BuckConfig buckConfig) {
     this.buckConfig = Preconditions.checkNotNull(buckConfig);
   }
@@ -83,6 +88,13 @@
     return help;
   }
 
+  protected CommandLineBuildTargetNormalizer getCommandLineBuildTargetNormalizer() {
+    if (commandLineBuildTargetNormalizer == null) {
+      commandLineBuildTargetNormalizer = new CommandLineBuildTargetNormalizer(buckConfig);
+    }
+    return commandLineBuildTargetNormalizer;
+  }
+
   /** @return androidSdkDir */
   public static Optional<File> findAndroidSdkDir() {
     Optional<File> androidSdkDir = findDirectoryByPropertiesThenEnvironmentVariable(
diff --git a/src/com/facebook/buck/cli/AuditCommandOptions.java b/src/com/facebook/buck/cli/AuditCommandOptions.java
index b5f38df..fdcd1b1 100644
--- a/src/com/facebook/buck/cli/AuditCommandOptions.java
+++ b/src/com/facebook/buck/cli/AuditCommandOptions.java
@@ -48,7 +48,7 @@
   }
 
   public List<String> getArgumentsFormattedAsBuildTargets() {
-    return CommandLineBuildTargetNormalizer.normalizeAll(getBuckConfig(), getArguments());
+    return getCommandLineBuildTargetNormalizer().normalizeAll(getArguments());
   }
 
   public boolean shouldGenerateDotOutput() {
diff --git a/src/com/facebook/buck/cli/BuildCommandOptions.java b/src/com/facebook/buck/cli/BuildCommandOptions.java
index 488391c..ee9b29d 100644
--- a/src/com/facebook/buck/cli/BuildCommandOptions.java
+++ b/src/com/facebook/buck/cli/BuildCommandOptions.java
@@ -101,7 +101,7 @@
   }
 
   public List<String> getArgumentsFormattedAsBuildTargets() {
-    return CommandLineBuildTargetNormalizer.normalizeAll(getBuckConfig(), getArguments());
+    return getCommandLineBuildTargetNormalizer().normalizeAll(getArguments());
   }
 
   public boolean isCodeCoverageEnabled() {
diff --git a/src/com/facebook/buck/cli/BuildTargetNormalizer.java b/src/com/facebook/buck/cli/BuildTargetNormalizer.java
deleted file mode 100644
index bc5e815..0000000
--- a/src/com/facebook/buck/cli/BuildTargetNormalizer.java
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright 2012-present Facebook, Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may
- * not use this file except in compliance with the License. You may obtain
- * a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- */
-
-package com.facebook.buck.cli;
-
-import com.google.common.collect.Lists;
-
-import java.util.List;
-
-public class BuildTargetNormalizer {
-
-  private BuildTargetNormalizer() {}
-
-  public static List<String> getArgumentsFormattedAsBuildTargets(List<String> arguments) {
-    return Lists.transform(arguments, CommandLineBuildTargetNormalizer.normalize);
-  }
-
-}
diff --git a/src/com/facebook/buck/cli/CommandLineBuildTargetNormalizer.java b/src/com/facebook/buck/cli/CommandLineBuildTargetNormalizer.java
index f9fd284..6b4e7d0 100644
--- a/src/com/facebook/buck/cli/CommandLineBuildTargetNormalizer.java
+++ b/src/com/facebook/buck/cli/CommandLineBuildTargetNormalizer.java
@@ -16,6 +16,7 @@
 
 package com.facebook.buck.cli;
 
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Function;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
@@ -58,10 +59,31 @@
  */
 class CommandLineBuildTargetNormalizer {
 
-  /** Utility class: do not instantiate. */
-  private CommandLineBuildTargetNormalizer() {}
+  private final Function<String, String> normalizer;
 
-  public static String normalizeBuildTargetIdentifier(final String buildTargetFromCommandLine) {
+  CommandLineBuildTargetNormalizer(final BuckConfig buckConfig) {
+    Preconditions.checkNotNull(buckConfig);
+    this.normalizer = new Function<String, String>() {
+      @Override
+      public String apply(String arg) {
+        String aliasValue = buckConfig.getBuildTargetForAlias(arg);
+        if (aliasValue != null) {
+          return aliasValue;
+        } else {
+          return normalizeBuildTargetIdentifier(arg);
+        }
+      }
+    };
+  }
+
+  public List<String> normalizeAll(List<String> arguments) {
+    // When transforming command-line arguments, first check to see whether it is an alias in the
+    // BuckConfig. If so, return the value associated with the alias. Otherwise, try normalize().
+    return Lists.transform(arguments, normalizer);
+  }
+
+  @VisibleForTesting
+  static String normalizeBuildTargetIdentifier(final String buildTargetFromCommandLine) {
     Preconditions.checkNotNull(buildTargetFromCommandLine);
 
     // Build rules in the root are weird, but they do happen. Special-case them.
@@ -98,29 +120,4 @@
 
     return target;
   }
-
-  public static List<String> normalizeAll(final BuckConfig buckConfig, List<String> arguments) {
-    // When transforming command-line arguments, first check to see whether it is an alias in the
-    // BuckConfig. If so, return the value associated with the alias. Otherwise, try normalize().
-    return Lists.transform(arguments, new Function<String, String>() {
-      @Override
-      public String apply(String arg) {
-        String aliasValue = buckConfig.getBuildTargetForAlias(arg);
-        if (aliasValue != null) {
-          return aliasValue;
-        } else {
-          return CommandLineBuildTargetNormalizer.normalize.apply(arg);
-        }
-      }
-    });
-  }
-
-  public static final Function<String, String> normalize = new Function<String, String>() {
-
-    @Override
-    public String apply(String target) {
-      return normalizeBuildTargetIdentifier(target);
-    }
-
-  };
 }
diff --git a/src/com/facebook/buck/cli/UninstallCommandOptions.java b/src/com/facebook/buck/cli/UninstallCommandOptions.java
index 85cdc74..2ed7b10 100644
--- a/src/com/facebook/buck/cli/UninstallCommandOptions.java
+++ b/src/com/facebook/buck/cli/UninstallCommandOptions.java
@@ -73,6 +73,6 @@
   }
 
   public List<String> getArgumentsFormattedAsBuildTargets() {
-    return CommandLineBuildTargetNormalizer.normalizeAll(getBuckConfig(), getArguments());
+    return getCommandLineBuildTargetNormalizer().normalizeAll(getArguments());
   }
 }