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)
```
if (complementLowerBoundWindow.lowerBound.isLessThan(negativeRange.lowerBound)) {
              return Maps.immutableEntry(negativeRange.lowerBound, negativeRange);
            }
          } else if (complementLowerBoundWindow.lowerBound.isLessThan(Cut.<C>belowAll())) {
            Range<C> negativeRange = Range.create(Cut.<C>belowAll(), nextComplementRangeUpperBound);
            nextComplementRangeUpperBound = Cut.belowAll();
            return Maps.immutableEntry(Cut.<C>belowAll(), negativeRange);
          }
          return endOfData();
        }
      };
    }
    @Override
    public int size() {
      return Iterators.size(entryIterator());
    }
    @Override
    public @Nullable Range<C> get(Object key) {
      if (key instanceof Cut) {
        try {
          @SuppressWarnings("unchecked")
          Cut<C> cut = (Cut<C>) key;
          
          Entry<Cut<C>, Range<C>> firstEntry = tailMap(cut, true).firstEntry();
          if (firstEntry != null && firstEntry.getKey().equals(cut)) {
            return firstEntry.getValue();
          }
        } catch (ClassCastException e) {
          return null;
        }