Unable to modify subRangeSet returned by TreeRangeSet.subRangeSet(Range).
IMO, it should be availiable to do so as specified in the document.

```java
import com.google.common.collect.Range;
import com.google.common.collect.TreeRangeSet;
import org.junit.jupiter.api.Test;

@SuppressWarnings("UnstableApiUsage")
public class SubRangeSetTest {

    @Test
    public void testAdd() {
        TreeRangeSet<Integer> set = TreeRangeSet.create();
        Range<Integer> range = Range.closedOpen(0, 5);
        set.subRangeSet(range).add(range);
    }

    @Test
    public void testReplaceAdd() {
        TreeRangeSet<Integer> set = TreeRangeSet.create();
        Range<Integer> range = Range.closedOpen(0, 5);
        set.add(range);
        set.subRangeSet(range).add(range);
    }
}
```

```
java.lang.UnsupportedOperationException
	at java.base/java.util.AbstractMap.put(AbstractMap.java:209)
	at com.google.common.collect.TreeRangeSet.replaceRangeWithSameLowerBound(TreeRangeSet.java:266)
	at com.google.common.collect.TreeRangeSet.add(TreeRangeSet.java:216)
	at com.google.common.collect.TreeRangeSet$SubRangeSet.add(TreeRangeSet.java:894)
	at SubRangeSetTest.testAdd(SubRangeSetTest.java:12)
```
```
java.lang.UnsupportedOperationException
	at com.google.common.collect.UnmodifiableIterator.remove(UnmodifiableIterator.java:46)
	at com.google.common.collect.Iterators.clear(Iterators.java:985)
	at com.google.common.collect.Maps$IteratorBasedAbstractMap.clear(Maps.java:3562)
	at com.google.common.collect.TreeRangeSet.add(TreeRangeSet.java:214)
	at com.google.common.collect.TreeRangeSet$SubRangeSet.add(TreeRangeSet.java:894)
	at SubRangeSetTest.testReplaceAdd(SubRangeSetTest.java:20)
```
for (BoundType lowerBoundType : BoundType.values()) {
        for (int j = i + 1; j <= MAX_BOUND; j++) {
          for (BoundType upperBoundType : BoundType.values()) {
            queryBuilder.add(Range.range(i, lowerBoundType, j, upperBoundType));
          }
        }
      }
    }
    QUERY_RANGES = queryBuilder.build();
  }
  void testViewAgainstExpected(RangeSet<Integer> expected, RangeSet<Integer> view) {
    assertEquals(expected, view);
    assertEquals(expected.asRanges(), view.asRanges());
    assertEquals(expected.isEmpty(), view.isEmpty());
    if (!expected.isEmpty()) {
      assertEquals(expected.span(), view.span());
    }
    for (int i = MIN_BOUND - 1; i <= MAX_BOUND + 1; i++) {
      assertEquals(expected.contains(i), view.contains(i));
      assertEquals(expected.rangeContaining(i), view.rangeContaining(i));
    }
    testEnclosing(view);
    if (view instanceof TreeRangeSet) {
      testRangesByLowerBounds((TreeRangeSet<Integer>) view, expected.asRanges());
    }
  }
  private static final ImmutableList<Cut<Integer>> CUTS_TO_TEST;
  static {
    List<Cut<Integer>> cutsToTest = Lists.newArrayList();
    for (int i = MIN_BOUND - 1; i <= MAX_BOUND + 1; i++) {