ENH: Better read_json error when handling bad keys
(in json data with orient=split)

Fixes #4730.

@Komnomnomnom does this look okay to you? Just changes the exception to be slightly clearer...
 E.g.

``` python
import pandas as pd
from pandas.compat import StringIO
import json
d = {u'columns': [0],
 u'data': [[0], [1], [2], [3], [4], [5], [6], [7], [8], [9]],
 u'index': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
 u'badkey': [5]}
s = StringIO(json.dumps(d))
pd.read_json(s, orient='split')
```

```
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "pandas/io/json.py", line 182, in read_json
    date_unit).parse()
  File "pandas/io/json.py", line 242, in parse
    self._parse_no_numpy()
  File "pandas/io/json.py", line 478, in _parse_no_numpy
    self.obj = _run_with_kwarg_exception(DataFrame, decoded, dtype=None)
  File "pandas/io/json.py", line 391, in _run_with_kwarg_exception
    raise ValueError(msg)
ValueError: JSON data had unexpected key: 'badkey'
```
 and I think it's clear enough in Python 3 too:

```
Traceback (most recent call last):
  File "./pandas/io/json.py", line 382, in _run_with_kwarg_exception
    return func(**kwargs)
TypeError: __init__() got an unexpected keyword argument 'badkey'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "./pandas/io/json.py", line 182, in read_json
    date_unit).parse()
  File "./pandas/io/json.py", line 242, in parse
    self._parse_no_numpy()
  File "./pandas/io/json.py", line 478, in _parse_no_numpy
    self.obj = _run_with_kwarg_exception(DataFrame, decoded, dtype=None)
  File "./pandas/io/json.py", line 391, in _run_with_kwarg_exception
    raise ValueError(msg)
ValueError: JSON data had unexpected key: 'badkey'
```
 I agree that the exception is much clearer. Rather than relying on the text of the message in the raised `TypeError`, which seems kind of fragile, would it be better to instead check that the decoded keys are only those encoded by `split` and raise a `ValueError` directly if not?

`columns`, `index`, `data` for DataFrame
`name`, `index`, `data` for Series
 @Komnomnomnom thanks for the cleaner matchgroup usage. I did it this way only to make it easier to maintain...but I guess we can just define what the keys are in json once, so no big problem.
 @Komnomnomnom any other elements need guards for bad keys? Otherwise, this is probably good.
 Nope `split` should be the only orient using named keys. Thanks @jtratner!
