Separate MultiIndex names from levels
- [x] progress towards #27138 
- [x] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

In #27138 I proposed doing some changes to ``MultiIndex``, so that the index type can have its data collected in ``_data`` as type ``List[Categorical]``,+ adding ``MultiIndex.arrays`` in order to access each full level as zero-copy ``Categorical``.

This is the first part of that proposal, and drops setting the names on the  ``levels[x].name`` attribute and instead sets the names on the ``MultiIndex._names`` attribute.

This PR is a minorly backward-breaking change (so would be good to get into 0.25), while the followup will not break anything.