Introduce the transitions() function and "transition" type in Starlark.

This is under development and experimental, and is thus attached to the new flag --experimental_starlark_config_transitions. This new API is subject to change at any time until it is promoted out of "experimental".

RELNOTES: None.
PiperOrigin-RevId: 217533910
diff --git a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
index 9fba528..0240a67 100644
--- a/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
+++ b/src/main/java/com/google/devtools/build/lib/syntax/SkylarkSemantics.java
@@ -104,6 +104,8 @@
 
   public abstract boolean experimentalPlatformsApi();
 
+  public abstract boolean experimentalStarlarkConfigTransitions();
+
   public abstract boolean incompatibleBzlDisallowLoadAfterStatement();
 
   public abstract boolean incompatibleDepsetIsNotIterable();
@@ -181,6 +183,7 @@
           .experimentalEnableRepoMapping(false)
           .experimentalRemapMainRepo(false)
           .experimentalPlatformsApi(false)
+          .experimentalStarlarkConfigTransitions(false)
           .incompatibleBzlDisallowLoadAfterStatement(false)
           .incompatibleDepsetIsNotIterable(false)
           .incompatibleDepsetUnion(false)
@@ -228,6 +231,8 @@
 
     public abstract Builder experimentalPlatformsApi(boolean value);
 
+    public abstract Builder experimentalStarlarkConfigTransitions(boolean value);
+
     public abstract Builder incompatibleBzlDisallowLoadAfterStatement(boolean value);
 
     public abstract Builder incompatibleDepsetIsNotIterable(boolean value);