Clean up DataFrame.setitem behavior for duplicate columns
- [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

cc  @jbrockmendel This cleans the edgy behavior up for duplicate columns.

Previous test was wrong.
If you're interested, there might be something worth salvaging from _setitem_array [here](https://github.com/jbrockmendel/pandas/blob/setitem-frame-no-defer/pandas/core/frame.py#L3244).  Avoids going through iloc so that we dont have to worry about inplace vs not-inplace there (xref #38896).

If/when I get #39302 in shape to be a real PR, something like that branch will have to be a part of it, but I'm optimistic you'll get around to it before I do. That looks good. I will try to incorporate this after this is merged. thanks @phofl 

was this technically a bug fix? or just an incorrect test?  Bug fix yes, but is covered by the whatsnew from #39341, follow up from that one