fix inconsistent index naming with union/intersect #35847
- [X] closes #35847
- [X] tests added / passed
- [X] passes `black pandas`
- [X] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

This takes care of some inconsistency in how names are handled by `Index` functions `union` and `intersection`, as discussed in #35847. I believe this covers all index types, either through the base class or in the subclass when necessary.

What I've implemented here actually uses the unanimous convention, wherein all input names must match to get assigned to the output. Originally, I was thinking consensus would be better (assign if there is only one non-None input name), but looking through the existing tests, it seems that unanimous was usually expected. I also had some worries about whether index names would become too "contagious" with consensus. Anyway, it's easy to change between the two if people have strong opinions on this.
Ok, added in a code example to whatsnew showing the new/consistent naming behavior when aggregating. Also split off those new tests.

Regarding copying in the various empty/equality cases, copy here means a deep copy including values, right? Seems like some of the tests are using "is" which breaks when you add in copying. I can look into that and the nan issues in a subsequent PR if that works. @jreback fixed the docs indentation issue, that's green now. i'm having trouble figuring out went wrong with some of the other tests. is it some kind of internal CI error? CI failures were unrelated, should be fixed if you merge master I think we're mostly good here, but the travis-ci build for ARM just kinda bailed without comment. Thanks @jbrockmendel! Pushed all your suggested changes. @iamlemec can you merge master; IIRC this was pretty close to ready @jbrockmendel sure thing, just pushed a rebase onto master thanks @iamlemec very nice! thanks for all the help @jreback and @jbrockmendel!