BUG: DataFrame.__setitem__ sometimes operating inplace
- [ ] closes #xxxx
- [ ] tests added / passed
- [ ] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them
- [ ] whatsnew entry

The fixed bug is the currently-xfailed test test_setitem_same_dtype_not_inplace (see #39510, which has its own subsection in the 1.3.0 release notes).  Pretty much all the other altered tests are changed because those tests rely on the incorrect behavior.

The main non-test change is the addition of an `inplace` check in `BlockManager.iset`.  We want inplace to be False when this is reached via `DataFrame.__setitem__` and True when reached via `loc/iloc.__setitem__`