Support label based slicing even for unsorted indexes?
By sorting the index under the hood, we could support label based slicing even for unordered indexes.

Does this seem like a good idea? Here is what the implementation would look like, roughly:

``` python
def slice_indexer_anyorder(idx, start=None, end=None):
    # preprocessing takes time O(n * log(n)) and space 2 * n
    # (these variables could be cached on the index)
    ordering = idx.argsort()
    reordered = idx.take(ordering)
    # query complexity is O(log(n) + k * log(k)),
    # where k is the size of the result
    start, end = reordered.slice_locs(start, end)
    return np.sort(ordering[start:end])
```

The main potential for confusion here is that this _conflicts_ with the current behavior for `.loc`, which is to sort all values with labels _between_ the locations of start and end if start and end are found in the index. So adding this to `.loc` would require deprecating the existing usage.

CC @immerrr @jreback @jorisvandenbossche 
