to_parquet and read_parquet are not symmetric if a column contains python lists
#### Code Sample, a copy-pastable example if possible

```python
>>> import pandas as pd                                                                                 
>>> df = pd.DataFrame({'A': ["this is a list".split(), "so is this one".split()]})
>>> df.to_parquet('tmp.parquet', 'pyarrow')
>>> df2 = pd.read_parquet('tmp.parquet', 'pyarrow')
>>> print("Type:", type(df2.A[0]), "Value:", repr(df2.A[0]))
Type: <class 'numpy.ndarray'> Value: array(['this', 'is', 'a', 'list'], dtype=object)
```
#### Problem description
If a pandas DataFrame has one or more columns where the cells are python objects containing a list of strings, then converting the DataFrame to parquet and back using pyarrow as the back end will result in the columns being converted to numpy arrays of strings.  This can cause unexpected problems later in the code.  For example trying to write the dataframe to a SQL database with `DataFrame.to_sql` will blow up since it does not know how to handle numpy arrays.

While investigating this I found that using fastparquet as the back end for both saving and loading worked OK, but saving with fastparquet and loading with pyarrow changed the lists into byte strings containing the repr of the list, i.e.
```
>>> df.to_parquet('tmp.parquet', 'fastparquet')
>>> df2 = pd.read_parquet('tmp.parquet', 'pyarrow')
>>> print("Type:", type(df2.A[0]), "Value:", repr(df2.A[0]))
Type: <class 'bytes'> Value: b'["this", "is", "a", "list"]'
```
Also saving with pyarrow and loading with fastparquet throws an exception:
```
>>> df.to_parquet('tmp.parquet', 'pyarrow')
>>> df2 = pd.read_parquet('tmp.parquet', 'fastparquet')
Traceback (most recent call last):
  File "<ipython-input-22-b30bd30928a4>", line 1, in <module>
    df2 = pd.read_parquet('tmp.parquet', 'fastparquet')
  File "/home/dave/anaconda3/envs/tca/lib/python3.6/site-packages/pandas/io/parquet.py", line 282, in read_parquet
    return impl.read(path, columns=columns, **kwargs)
  File "/home/dave/anaconda3/envs/tca/lib/python3.6/site-packages/pandas/io/parquet.py", line 211, in read
    return parquet_file.to_pandas(columns=columns, **kwargs)
  File "/home/dave/anaconda3/envs/tca/lib/python3.6/site-packages/fastparquet/api.py", line 421, in to_pandas
    check_column_names(self.columns + list(self.cats), columns, categories)
  File "/home/dave/anaconda3/envs/tca/lib/python3.6/site-packages/fastparquet/util.py", line 92, in check_column_names
    if set(arg) - set(columns):
TypeError: unhashable type: 'dict'
```

N.B. I am not sure which of these are bugs in pandas and which are bugs in pyarrow & fastparquet.   If this is not the right place for this then let me know and I will raise tickets on the respective projects.


#### Output of ``pd.show_versions()``
<details>

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

pandas: 0.24.2
pytest: 3.8.2
pip: 18.1
setuptools: 40.4.3
Cython: 0.29.5
numpy: 1.15.4
scipy: 1.2.1
pyarrow: 0.13.0
xarray: None
IPython: 7.3.0
sphinx: None
patsy: 0.5.1
dateutil: 2.8.0
pytz: 2018.9
blosc: None
bottleneck: None
tables: 3.4.4
numexpr: 2.6.9
feather: None
matplotlib: 3.0.2
openpyxl: 2.5.12
xlrd: 1.1.0
xlwt: None
xlsxwriter: None
lxml.etree: 3.8.0
bs4: None
html5lib: 1.0.1
sqlalchemy: 1.2.18
pymysql: None
psycopg2: 2.7.7 (dt dec pq3 ext lo64)
jinja2: 2.8.1
s3fs: None
fastparquet: 0.3.0
pandas_gbq: None
pandas_datareader: None
gcsfs: None

</details>
