pandas.Index.get_indexer_non_unique
#### Problem description

The behavior of [`get_indexer_non_unique`](https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Index.get_indexer_non_unique.html) is unintuitive to me. This issue isn't a bug, just a space to discuss whether the behavior of this method should be reconsidered or changed. Some discussion has already been had in #16386. The discussion is moving here. 

```
idx = pd.Index([0, 0, 1, 2, 2])
idx.get_indexer_non_unique([0, 2, 3])
```
The result of that call is 
```
(Int64Index([0, 1, 3, 4, -1], dtype='int64'), array([2]))
```
i.e. 
```
([0, 1, 3, 4, -1], [2])
```
But that's fairly confusing to me. Wouldn't you instead want
```
([0, 1], [3, 4], [-1])
```
Both of the above mostly capture the same information. But I think the second is far more intuitive. 

@shoyer said:

> Sure, please do open another issue to discuss. To be clear: I don't understand the exact motivation here, either, so we'll want to hear from Jeff on this one. One thing to consider is that unstructured lists of lists like [[0, 1], [3, 4], [-1]] can't be made used very efficiently, because they can't be represented by numpy arrays.

I don't think we should use regular python lists -- numpy arrays sound good. Is there some reason we wouldn't be able to use numpy arrays?

@jreback said: 

> this is an indexer to the original array
> 
> you can .take(..) to get the result (excluding -1 which are missing values ; there position marks where things are missing)

I agree that this representation that's currently in use "works", but I think you might want to know what is returned from each of your "query" values separately, i.e. in the example above, the distinction between `[0, 1], [3, 4]` vs the current behavior `[0, 1, 3, 4,..]`. 

Let me know what you guys think!