Add SkylarkSemantics#toBuilder() and #builderWithDefaults()

This avoids having to inline a bunch of default values when you only want to change one flag.

RELNOTES: None
PiperOrigin-RevId: 178148057
diff --git a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
index d2b7ef3..714f197 100644
--- a/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
+++ b/src/test/java/com/google/devtools/build/lib/packages/SkylarkSemanticsConsistencyTest.java
@@ -74,7 +74,7 @@
     }
   }
 
-  /*
+  /**
    * Checks that a randomly generated {@link SkylarkSemantics} object can be serialized and
    * deserialized to an equivalent object.
    */
@@ -97,6 +97,14 @@
     assertThat(semanticsFromOptions).isEqualTo(defaultSemantics);
   }
 
+  @Test
+  public void canGetBuilderFromInstance() {
+    SkylarkSemantics original = SkylarkSemantics.DEFAULT_SEMANTICS;
+    assertThat(original.internalSkylarkFlagTestCanary()).isFalse();
+    SkylarkSemantics modified = original.toBuilder().internalSkylarkFlagTestCanary(true).build();
+    assertThat(modified.internalSkylarkFlagTestCanary()).isTrue();
+  }
+
   /**
    * Constructs a {@link SkylarkSemanticsOptions} object with random fields. Must access {@code
    * rand} using the same sequence of operations (for the same fields) as {@link