PERF: use StringHasTable for strings
xref #13745 

provides a modest speedup for all string hashing. The key thing is, it will release the GIL on more operations where this is possible (mainly ``factorize``).

can be easily extended to ``.value_counts()`` and ``.duplicated()`` (for strings), new issue for that one

```
In [9]: np.random.seed(1234)

In [10]: strings = tm.makeStringIndex(1000000)

In [11]: def f():
    ...:     for i in range(2):
    ...:         pd.factorize(strings)
    ...:         

In [12]: @tm.test_parallel(num_threads=2)
    ...: def g():
    ...:     pd.factorize(strings)
    ...:     

In [13]: %timeit f()
1 loop, best of 3: 685 ms per loop

In [14]: %timeit g()
1 loop, best of 3: 446 ms per loop

In [15]: strings = strings.take(np.random.randint(0,1000,size=len(strings)))

In [16]: strings.nunique()
Out[16]: 1000

In [17]: %timeit f()
1 loop, best of 3: 222 ms per loop

In [18]: %timeit g()
10 loops, best of 3: 190 ms per loop
```
cc @mrocklin
 ## [Current coverage](https://codecov.io/gh/pandas-dev/pandas/pull/14859?src=pr) is 85.31% (diff: 100%)


> No coverage report found for **master** at 033d345.

> Powered by [Codecov](https://codecov.io?src=pr). Last update [033d345...ade23d1](https://codecov.io/gh/pandas-dev/pandas/compare/033d34596f5327472007f0f15029b86050ee2592...ade23d1cb3d2bdd7bef1d783d060bbc6eeff7db7?src=pr) cc @mrocklin

if you can give this a stress test (and see if it helps in your perf tests), when you have a chance I *think* I've narrowed down my original problem to something else.
Working on isolating it further now.  Will try this after that issue is
removed.

On Wed, Dec 14, 2016 at 11:05 AM, Jeff Reback <notifications@github.com>
wrote:

> cc @mrocklin <https://github.com/mrocklin>
>
> if you can give this a stress test (and see if it helps in your perf
> tests), when you have a chance
>
> —
> You are receiving this because you were mentioned.
> Reply to this email directly, view it on GitHub
> <https://github.com/pandas-dev/pandas/pull/14859#issuecomment-267074198>,
> or mute the thread
> <https://github.com/notifications/unsubscribe-auth/AASszImRcGD1PokmZSZMPJFRbLyO1ToCks5rIBPLgaJpZM4LKF2s>
> .
>
