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)
```
import java.util.TreeMap;
import org.checkerframework.checker.nullness.qual.Nullable;
/**
 * An implementation of {@link RangeSet} backed by a {@link TreeMap}.
 *
 * @author Louis Wasserman
 * @since 14.0
 */
@Beta
@GwtIncompatible 
public class TreeRangeSet<C extends Comparable<?>> extends AbstractRangeSet<C>
    implements Serializable {
  @VisibleForTesting final NavigableMap<Cut<C>, Range<C>> rangesByLowerBound;
  
  public static <C extends Comparable<?>> TreeRangeSet<C> create() {
    return new TreeRangeSet<C>(new TreeMap<Cut<C>, Range<C>>());
  }
  
  public static <C extends Comparable<?>> TreeRangeSet<C> create(RangeSet<C> rangeSet) {
    TreeRangeSet<C> result = create();
    result.addAll(rangeSet);
    return result;
  }
  /**
   * Returns a {@code TreeRangeSet} representing the union of the specified ranges.
   *
   * <p>This is the smallest {@code RangeSet} which encloses each of the specified ranges. An
   * element will be contained in this {@code RangeSet} if and only if it is contained in at least
   * one {@code Range} in {@code ranges}.
   *