Functions should raise on unexpected keyword arguments in **kwargs
A lot of functions in pandas ignore any additional keyword arguments in `**kwargs`. This makes it very easy for unnoticed mistakes in the code, without getting any error; I have personally came across both cases below in my code:

```
>>> def foo(df):
...     df.drop('joe', axis=1, inplce=True)  # mis-spelling a keyword
...     df.reindex([1, 0], inplace=True)  # specifying an unsupported keyword
...     return df

>>> df
   jim  joe  jolie
0   71   22     92
1   78   55     77

>>> foo(df)
   jim  joe  jolie
0   71   22     92
1   78   55     77
```

Another example that this may happen unnoticed is with legacy code, once there is an api change; for example once `cols` argument is dropped form [`.drop_duplicates`](http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.drop_duplicates.html#pandas.DataFrame.drop_duplicates). I think, at least at the public api level, the code should check if after `.pop`ing supported key-word arguments, anything is left in `**kwargs`. [example from scipy project](https://github.com/scipy/scipy/blob/5cf30815cbf2bf9e66cea8e289fa09213e8161fc/scipy/optimize/optimize.py#L654).
