REF: refactor **kwargs usage
related issue: https://github.com/pydata/pandas/issues/8597. 

among changes:

[tests/test_generic.py](https://github.com/pydata/pandas/blob/0a2ea0ac39a74771d54b91522728f6092b0ef897/pandas/tests/test_generic.py#L603) `downcast` is misspelled `donwcast`, but no error is raised, because of how `**kwargs` is used.

[core/categorical.py:sort](https://github.com/pydata/pandas/blob/0a2ea0ac39a74771d54b91522728f6092b0ef897/pandas/core/categorical.py#L945) `na_position` is not passed to `self.order`.

[core/categorical.py:fillna](https://github.com/pydata/pandas/blob/0a2ea0ac39a74771d54b91522728f6092b0ef897/pandas/core/categorical.py#L981) `Categorical.fillna` does not support `inplace` as opposed to say `Series.fillna` or `DataFrame.fillna`, but `**kwargs` being there causes below code to just silently ignore passed argument:

```
>>> ca = pd.Categorical([0, 0, 2, 2, 3, np.nan])
>>> ca.fillna(0, inplace=True)
[0, 0, 2, 2, 3, 0]
Categories (3, int64): [0 < 2 < 3]
>>> ca
[0, 0, 2, 2, 3, NaN]
Categories (3, int64): [0 < 2 < 3]
```

[This test](https://github.com/pydata/pandas/blob/0a2ea0ac39a74771d54b91522728f6092b0ef897/pandas/tests/test_groupby.py#L4418) is basically testing that you can specify _any_ keyword argument and it is just silently ignored. I cannot think of any case that this would be a good idea, or has any use case.

multiple instances where `*args` or `*kwargs` are not passed to inner function or have any use at all, as can be seen in the PR diff.

@behzadnouri some of these changes are ok, others I have commented on. These need some tests, otherwise someone else will come along one day and change it back because they need to pass an argument thru. So don't need a lot but a small set of API compat tests that test passing unknown / numpy compat args (e.g. out/keepdims) as appropriate / as needed.

We would need a release note documenting any actual API changes here (one that a user could see, e.g. the ones you enumerated at the top of the PR)
 I reverted some of the changes mainly regarding decorating numpy functions, etc. and added a test.

other changes seems ok to me:

[this](https://github.com/pydata/pandas/blob/e9ee47c863a68acfaa3d824d88c450c1e48de473/pandas/core/generic.py#L1911) is the only place i see where defines `__finalize__`. as far as i can say, there is no need for `**kwargs`, and it would not cause any api compatibility issue. i would suggest removing `**kwargs`.

as for `argsort`, other instances of `argsort` pass in arguments; for example: [here](https://github.com/pydata/pandas/blob/26129f56bf0cc6ec91b2f694d6ef341ded2d1e84/pandas/core/index.py#L1148) in the same file; or [here](https://github.com/pydata/pandas/blob/26129f56bf0cc6ec91b2f694d6ef341ded2d1e84/pandas/core/categorical.py#L843) in `categoricals.py`. similarly for `apply`.

I would suggest to keep these changes;
 @behzadnouri can you rebase this
 @jreback rebased
 merged via https://github.com/pydata/pandas/commit/38021ca83d5c85d27236ebc04865f936d2a82f99

thanks!
