Use Identifiers instead of Strings

The high level summary of the changes:
- use `Identifier` instead of `name` in `Keyword` and `Parameter`.
- construct `Identifier` through a factory method in case future interning is desired.

These changes are in preparation for using `Identifier` instead of `name` for environment lookups.

Closes #5304.

PiperOrigin-RevId: 199869171
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/Argument.java b/src/main/java/com/google/devtools/build/lib/syntax/Argument.java
index a4d782a..09f5120 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/Argument.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/Argument.java
@@ -58,11 +58,18 @@
       return false;
     }
 
+    /** @deprecated Prefer {@link #getIdentifier()} instead. */
+    @Deprecated
     @Nullable
     public String getName() { // only for keyword arguments
       return null;
     }
 
+    @Nullable
+    public Identifier getIdentifier() {
+      return null;
+    }
+
     public Expression getValue() {
       return value;
     }
@@ -94,16 +101,21 @@
   /** keyword argument: K = Expression */
   public static final class Keyword extends Passed {
 
-    final String name;
+    final Identifier identifier;
 
-    public Keyword(String name, Expression value) {
+    public Keyword(Identifier identifier, Expression value) {
       super(value);
-      this.name = name;
+      this.identifier = identifier;
     }
 
     @Override
     public String getName() {
-      return name;
+      return identifier.getName();
+    }
+
+    @Override
+    public Identifier getIdentifier() {
+      return identifier;
     }
 
     @Override
@@ -113,7 +125,7 @@
 
     @Override
     public void prettyPrint(Appendable buffer) throws IOException {
-      buffer.append(name);
+      buffer.append(identifier.getName());
       buffer.append(" = ");
       value.prettyPrint(buffer);
     }