counting sort instead of np.argsort in left outer join
Previously I had submitted https://github.com/pydata/pandas/pull/7853. Given that we are sorting indexers, for performance reasons I should have used `groupsort_indexer` instead of `np.argsort`.

on master:

```
In [7]: np.random.seed(2718281)

In [8]: n = 50000

In [9]: left = DataFrame(np.random.randint(1, n/500, (n, 2)),
   ...:         columns=['jim', 'joe'])

In [10]: right = DataFrame(np.random.randint(1, n/500, (n, 2)),
   ....:         columns=['jolie', 'jolia']).set_index('jolie')

In [11]: %timeit left.join(right, on='jim')
1 loops, best of 3: 3.53 s per loop
```

on branch:

```
In [13]: %timeit left.join(right, on='jim')
1 loops, best of 3: 2.46 s per loop
```
