BUG/API: make setitem-inplace preserve dtype when possible with PandasArray, IntegerArray, FloatingArray
- [ ] closes #xxxx
- [x] tests added / passed
- [x] 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

xref #38896 (doesn't close).  In general `df[:, "A"] = foo` tries to operate in-place before falling back to casting.  This makes sure we do that when `foo` is a `PandasArray`, `IntegerArray`, or `FloatingArray`

I guess could/should do the same for BooleanArray

rebased + green > ok maybe if you can add a doc-string to the function will be more obvious that we are trying to match the len here

docstring updated + green am ok with this, @jorisvandenbossche  if any addl comments. There are some questions in my last review above for which I was still waiting on an answer let's stick a pin in this until #39163 goes in; it will be easier to address outstanding questions/comments at that point mothballing until after #39163 