ENH: Implement dict-like support for rename and set_names in MultiIndex
- [x] closes #20421
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

I tried my hand in adding support for dict-like renamings for MultiIndexes. This seemed as the most straight forward way to me, because we do not have to add complex logic as long as we can cast the dict-like objects to regular configurations.

We probably must add a docstring to MultiIndex.rename now?
cc @Dr-Irv if you'd have a look. this is api you were expecting (from the OP)? > cc @Dr-Irv if you'd have a look. this is api you were expecting (from the OP)?

Yes, that is the API.  I didn't check the implementation, but the tests should reflect the "normal" use case of having a `MultiIndex` with names that are different for each level, and you want to change one or two of the names.  Also, should check that behavior is consistent with `DataFrame.rename()` if a name in the `dict` argument is not one of the level names - I'm not sure what we do in `DataFrame.rename()` if that is the case. @Dr-Irv 

Concerning missing names: I have oriented me on df.rename, as you also suggested. df.rename does nothing for missing index elements or column names.

Additionally for duplicates: Same holds true here. Is also done like df.rename. It produces duplicates if we have the same name twice in the original and it also produces duplicates if the targets already exist. ping @jreback green thanks @phofl 