BUG: Wrong dtype when resetting a multiindex with missing values. (#1…
…9602 and #24206)

- Fixed the bad path in reset_index where the dtype was ignored if there are only
missing values.

- Simplified the structure of _maybe_casted_values in reset_index by
using as much as possible the take method of ExtensionArray's

- [ ] closes #19602
- [ ] closes #24206
- [ ] tests added / passed
- [ ] passes `black pandas`
- [ ] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry
