PERF: GH10213 kth_smallest GIL release
One tiny part of #10213 

```
import timeit

setup_seq = '''
import pandas
import numpy
numpy.random.seed(1234)
x = numpy.random.randn(10000000)
a = x.copy()
b = x.copy()

def f(s):
    pandas.algos.kth_smallest(s, 500000)

def seq():
    f(a)
    f(b)
'''

setup_parallel = '''
import pandas
import numpy
import threading
numpy.random.seed(1234)
x = numpy.random.randn(10000000)
a = x.copy()
b = x.copy()

def f(s):
    pandas.algos.kth_smallest(s, 500000)

def parallel():
    thread1 = threading.Thread(target=f, args=(a,))
    thread2 = threading.Thread(target=f, args=(b,))
    thread1.start()
    thread2.start()
    thread1.join()
    thread2.join()
'''

print(min(timeit.repeat(stmt='seq()', setup=setup_seq, repeat=100, number=1)))
print(min(timeit.repeat(stmt='parallel()', setup=setup_parallel, repeat=100, number=1)))
```

On master

```
0.15268295999976544
0.15424678300041705
```

On branch

```
0.1544521670002723
0.08813380599985976
```

Testing of `nsmallest`/`nlargest`/`median` (I don't think `median` calls `kth_smallest` though)

```
import pandas, numpy
from pandas.util.testing import test_parallel
n = 1000000
k = 50000
numpy.random.seed(1234)
s = pandas.Series(numpy.random.randn(n))

def f():
    s.nlargest(k)

def seq():
    f()
    f()

@test_parallel(num_threads=2)
def g():
    f()
```

Master `nsmallest`

```
In [2]: %timeit f()
10 loops, best of 3: 42.4 ms per loop

In [3]: %timeit g()
10 loops, best of 3: 79.9 ms per loop

In [4]: %timeit seq()
10 loops, best of 3: 84.9 ms per loop
```

Branch `nsmallest`

```
In [10]: %timeit f()
10 loops, best of 3: 42.8 ms per loop

In [11]: %timeit g()
10 loops, best of 3: 68.6 ms per loop

In [12]: %timeit seq()
10 loops, best of 3: 91.2 ms per loop
```

Master `nlargest`

```
In [2]: %timeit f()
10 loops, best of 3: 47.5 ms per loop

In [3]: %timeit g()
10 loops, best of 3: 86 ms per loop

In [4]: %timeit seq()
```

Branch `nlargest`

```
In [10]: %timeit f()
10 loops, best of 3: 48.1 ms per loop

In [11]: %timeit g()
10 loops, best of 3: 71 ms per loop

In [12]: %timeit seq()
10 loops, best of 3: 95.7 ms per loop
```

Master `median`

```
In [2]: %timeit f()
100 loops, best of 3: 15.4 ms per loop

In [3]: %timeit g()
10 loops, best of 3: 20.7 ms per loop

In [4]: %timeit seq()
10 loops, best of 3: 30.7 ms per loop
```

Branch `median`

```
In [12]: %timeit f()
100 loops, best of 3: 15 ms per loop

In [13]: %timeit g()
10 loops, best of 3: 21.5 ms per loop

In [14]: %timeit seq()
10 loops, best of 3: 30 ms per loop
```

Results are pretty in line with expectations -- `nsmallest` does quite a bit more than `kth_smallest`, such as copying and indexing. 
