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)
```
}
    }
    Entry<Cut<C>, Range<C>> entryBelowUB = rangesByLowerBound.floorEntry(rangeToRemove.upperBound);
    if (entryBelowUB != null) {
      
      Range<C> rangeBelowUB = entryBelowUB.getValue();
      if (rangeToRemove.hasUpperBound()
          && rangeBelowUB.upperBound.compareTo(rangeToRemove.upperBound) >= 0) {
        
        replaceRangeWithSameLowerBound(
            Range.create(rangeToRemove.upperBound, rangeBelowUB.upperBound));
      }
    }
    rangesByLowerBound.subMap(rangeToRemove.lowerBound, rangeToRemove.upperBound).clear();
  }
  private void replaceRangeWithSameLowerBound(Range<C> range) {
    if (range.isEmpty()) {
      rangesByLowerBound.remove(range.lowerBound);
    } else {
      rangesByLowerBound.put(range.lowerBound, range);
    }
  }
  @NullableDecl private transient RangeSet<C> complement;
  @Override
  public RangeSet<C> complement() {
    RangeSet<C> result = complement;
    return (result == null) ? complement = new Complement() : result;
  }
  @VisibleForTesting
  static final class RangesByUpperBound<C extends Comparable<?>>