BUG: .get_indexer_non_unique() must return an array of ints (#44084)
GH#44084 boils down to the following.

According to the docs `.get_indexer_non_unique()` is supposed to return
"integers from 0 to n - 1 indicating that the index at these positions matches
the corresponding target values".  However, for an index that is non unique and
non monotonic it returns a boolean mask.  That is because it uses `.get_loc()`
which for non unique, non monotonic indexes returns a boolean mask.

This patch catches that case and converts the boolean mask from `.get_loc()`
into the corresponding array of integers if the index is not unique and not
monotonic.

- [x] closes #44084
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit) for how to run them
- [x] whatsnew entry

thanks @johannes-mueller 

do we have sufficient testing on this for *other* index types aside from those explicityly tested here? if not would take a PR for that