Deprecate non-keyword arguments for methods with `inplace`
## Background

Having many parameters with defaults makes static typing a lot harder when one of them changes the return type, as they require many* overloads.

There's still no broad agreement about whether or not to deprecate the `inplace` argument, so in the meanwhile, if we force default-arguments to be keyword-only, then we can at least set the correct return types for these methods without requiring all these overloads (as many as 38 in one case!).

## What to do

1. Choose a method from the following list:

- [ ] pandas/core/computation/eval.py:164:0, eval (skip for now)
- [x] pandas/core/frame.py:4718:4, set_axis
- [x] pandas/core/frame.py:4743:4, drop
- [x] pandas/core/frame.py:5134:4, fillna
- [x] pandas/core/frame.py:5306:4, set_index
- [x] pandas/core/frame.py:5572:4, reset_index
- [x] pandas/core/frame.py:5809:4, dropna
- [x] pandas/core/frame.py:5958:4, drop_duplicates
- [x] pandas/core/frame.py:6196:4, sort_values
- [x] pandas/core/frame.py:6267:4, sort_index
- [x] pandas/core/generic.py:6432:4, ffill
- [x] pandas/core/generic.py:6495:4, bfill
- [x] pandas/core/generic.py:6700:4, interpolate
- [x] pandas/core/generic.py:7473:4, clip
- [x] pandas/core/generic.py:9080:4, where
- [x] pandas/core/generic.py:9234:4, mask
- [x] pandas/core/indexes/base.py:1530:4, set_names
- [x] pandas/core/indexes/multi.py:810:4, set_levels
- [x] pandas/core/indexes/multi.py:997:4, set_codes
- [x] pandas/core/resample.py:831:4, interpolate
- [x] pandas/core/series.py:1279:4, reset_index
- [x] pandas/core/series.py:2028:4, drop_duplicates
- [x] pandas/core/series.py:3228:4, sort_values
- [x] pandas/core/series.py:3438:4, sort_index
- [x] pandas/core/series.py:4475:4, set_axis
- [x] pandas/core/series.py:4490:4, drop
- [x] pandas/core/series.py:4713:4, fillna
- [x] pandas/core/series.py:5064:4, dropna
- [x] read_csv
- [x] read_table
- [x] concat

2. Use `pandas.util._decorators.deprecate_nonkeyword_arguments` to issue a FutureWarning that the method's default arguments will be keyword-only in the next release.

3. Fixup any tests / internal code which uses such default arguments positionally. See [this gist](https://gist.github.com/MarcoGorelli/1e8fb9d4cfb24353b0022f03150651a0) for a helper-script which can help identify cases which need fixing, just replace `"drop"` with whatever method you're working on and then run it as `python visitor.py`.

4. Add a new test, checking that a FutureWarning is raised if this method's default arguments are used positionally.

5. Add a note to `doc/source/whatsnew/v1.3.0.rst`

See https://github.com/pandas-dev/pandas/pull/41511 for an example of how to do this.

In most of these methods, the first argument is probably fine to be kept as is, it's the ones after that (such as `axis`) which should become keyword-only.

----

*(2^{number of default types preceding the one to overload} +2)

----

It's really common to call `replace` with both `value` and `to_replace` as positional, so I think we can make an exception for that one. It'll only require 6 overloads, which I'd argue isn't too many, especially if no other method requires more than 3 or 4


---

TODO: unify the whatsnew entries