TST/CLN: break up & parametrize tests for df.set_index
While working on #22225 I had the strong urge to clean up the tests for `df.set_index` (to be able to work off of them for `series.set_index`)

Since the diff is pretty busted, here's a description. In `tests/frame/test_alter_axes.py`, I did:
- externalised an often-used df as a fixture
- broke up `test_set_index2` into several pieces
- renamed `test_set_index_bug` to `test_set_index_after_mutation` (following corresponding GH issue)
- renamed `test_set_index_nonuniq` to `test_set_index_verify_integrity` (also added a MI-case)
- strongly parametrized `test_set_index_pass_arrays` and `test_set_index_duplicate_names`, including several combinations and cases that were not tested before
- replaced everything `pd.` with direct imports (best practice according to review in #21899):
  > don’t import pd, directly import instead
- replaced `assert_series_equal` etc. with `tm.assert_series_equal` (best practice according to review in #21899):
  > use tm; don’t import assert_series_equal
- cleaned up the other tests a bit too, including several open TODOs and getting rid of the `check_names=False` in several cases.

I also added better warnings in case there are duplicate column labels in `keys`, and some corresponding tests.