KeyError raised when accessing .loc from a different thread
#### Code Sample, a copy-pastable example if possible

```python
import numpy as np
import pandas as pd
from concurrent.futures import ThreadPoolExecutor

fs = HadoopFileSystem(...)
table = fs.read_parquet(index_path, use_threads=True)
dataset_index = table.to_pandas(categories=['key'])

# dataset_index.loc[0]  # <-- uncommenting fixes the issue

max_loc = dataset_index.shape[0]

def foo():
    return dataset_index.loc[np.random.randint(0, max_loc - 1)]['key']

with ThreadPoolExecutor(max_workers=100) as executor:
    futures = [executor.submit(foo) for i in range(100)]
    a = [f.result() for f in futures]

```
#### Problem description
When loading a large parquet file (230MB on disk and ~1.5GB in memory) and trying to access `loc[x]` on a different thread, I am getting the following crash:
```
Traceback (most recent call last):
  File "/home/yevgeni/uatc/av/source/python/repro_race.py", line 55, in <module>
    a = [f.result() for f in futures]
  File "/tmp/zz/local/lib/python2.7/site-packages/concurrent/futures/_base.py", line 455, in result
    return self.__get_result()
  File "/tmp/zz/local/lib/python2.7/site-packages/concurrent/futures/thread.py", line 63, in run
    result = self.fn(*self.args, **self.kwargs)
  File "/home/yevgeni/uatc/av/source/python/repro_race.py", line 48, in foo
    res = dataset_index.loc[idx]['key']
  File "/tmp/zz/local/lib/python2.7/site-packages/pandas/core/indexing.py", line 1500, in __getitem__
    return self._getitem_axis(maybe_callable, axis=axis)
  File "/tmp/zz/local/lib/python2.7/site-packages/pandas/core/indexing.py", line 1913, in _getitem_axis
    return self._get_label(key, axis=axis)
  File "/tmp/zz/local/lib/python2.7/site-packages/pandas/core/indexing.py", line 141, in _get_label
    return self.obj._xs(label, axis=axis)
  File "/tmp/zz/local/lib/python2.7/site-packages/pandas/core/generic.py", line 3575, in xs
    loc = self.index.get_loc(key)
  File "/tmp/zz/local/lib/python2.7/site-packages/pandas/core/indexes/base.py", line 2604, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))
  File "pandas/_libs/index.pyx", line 108, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 132, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 987, in pandas._libs.hashtable.Int64HashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 993, in pandas._libs.hashtable.Int64HashTable.get_item
KeyError: 147272
```
Found two possible workarounds:
- Call `dataset_index.loc[0]` before accessing the index on other threads.
- Repeatative calls to `loc[x]` on the thread will make `KeyError` go away and I would get the correct value.

Other observations: before 0.24.0 I would be able to reproduce the failure by using `dataset_index = pd.DataFrame(np.random.randn(5000000, 4), columns=list('ABCD'))`, but after 0.24.0 this reproduces only on a parquet file loaded over a slow network connection. 

#### Expected Output

I would expect the code to be thread-safe..

#### Output of ``pd.show_versions()``

<details>

INSTALLED VERSIONS
------------------
commit: None
python: 2.7.15.final.0
python-bits: 64
OS: Linux
OS-release: 4.15.0-60-generic
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8
LOCALE: None.None

pandas: 0.24.0
pytest: None
pip: 19.2.3
setuptools: 41.2.0
Cython: None
numpy: 1.16.5
scipy: None
pyarrow: 0.14.1
xarray: None
IPython: None
sphinx: None
patsy: None
dateutil: 2.8.0
pytz: 2019.2
blosc: None
bottleneck: None
tables: None
numexpr: None
feather: None
matplotlib: None
openpyxl: None
xlrd: None
xlwt: None
xlsxwriter: None
lxml.etree: None
bs4: None
html5lib: None
sqlalchemy: None
pymysql: None
psycopg2: None
jinja2: None
s3fs: None
fastparquet: 0.3.2
pandas_gbq: None
pandas_datareader: None
gcsfs: None
</details>
