BUG: create new MI from MultiIndex._get_level_values
- [x] closes #33131
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

Closes #33131, a weakref was released too early.
If PeriodEngine.get_indexer is ever called it will raise AttributeError, ditto get_pad_indexer, get_backfill indexer.   @jreback , this is a regression since v1.0, causes by #32669, so a whatsnew isn't needed here.

@jbrockmendel , it looks like it also did that in v1.0?:

```python
>>> idx = pd.MultiIndex.from_arrays([pd.PeriodIndex([pd.Period("2019Q1"), pd.Period("2019Q2")], name='b')])
>>> idx2 = pd.MultiIndex.from_arrays([idx._get_level_values(level) for level in range(idx.nlevels)])
>>> idx2.levels[0]._engine.get_indexer(idx.levels[0])
AttributeError: 'super' object has no attribute '_ensure_mapping_populated'  # both 1.0 and master
```
 thanks @topper-123 