[WIP] Test (and more fixes) for duplicate indices with concat
- [ ] closes #31308, #36263
- [ ] tests added / passed
- [ ] passes `black pandas`
- [ ] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

Follow up to #38654, currently WIP.

It's a work in progress because it turns out union and intersection act differently for different index types. `intersection` seems mostly normal, except for `IntervalIndex` #38743), while `union` is sometimes a set union (for `Index`) and sometimes keeps duplicates (for many `Index` subclasses, though order matters sometimes).

This effects `concat` in `get_objs_combined_axis`. Once I figured out where the problems were coming from, I figured I could maybe side step this by adding checks to `get_objs_combined_axis` for equality and uniqueness. All checks pass `reshape` on my machine, but I'm done working on this for the day, so I'll rely on CI to do the checks on the rest of the codebase.

------------------------

This test could be expanded with:

* More types of indexes (there is no `object` index currently)
* Checks for commutativity, i.e. results should have set-equal columns regardless of order
* Interactions with other arguments (`sort`, `axis`?)

TODO:

- [ ] Move test for `concat` where duplicates don't error
- [ ] Decide whether error should be `DuplicateLabelErrors`
- [ ] Have error report which duplicates are used
- [ ] Check that error reports which duplicates are used