ENH: Add sort parameter to RangeIndex.union (#24471)
- [ ] progress towards #24471
- [x] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

This is WIP for adding a ``sort`` parameter to ``RangeIndex.union`` that behaves in a similar way to the other index types.

``sort=None`` is the default to make it consistent with the union method in the base class. When ``sort=None`` a monotonically increasing ``RangeIndex`` will be returned if possible and a sorted ``Int64Index`` if not.

The way I have implemented ``sort=False`` is that it returns an ``Int64Index`` in all cases. I have been trying to think of cases where it would make sense to still return a ``RangeIndex`` when ``sort=False``. For example, there might be a case where if we had two ``RangeIndex``s and both had the same step and the second ``RangeIndex`` overlapped with the first we would want to return a ``RangeIndex`` here even if we had ``sort=False``. But would it be better just to always return an ``Int64Index`` when ``sort=False`` as I have done here to make the return type consistent and because this particular case seems quite rare? 

```
# sort=False returns an Int64Index even though we might be able to return a RangeIndex as below
In [1]: RangeIndex(0, 10, 2).union(RangeIndex(10, 12, 2), sort=False)
Out[1]: Int64Index([0, 2, 4, 6, 8, 10], dtype='int64')

In [1]: RangeIndex(0, 10, 2).union(RangeIndex(10, 12, 2), sort=None)
Out[1]: RangeIndex(start=0, stop=12, step=2)
```