BUG: Series/Frame invert dtypes
Fixes NDFrame.__invert__ to preserve dtypes by applying things blockwise. Notably, this fixes `~Series[BooleanDtype]`.

This also provides a pattern for other unary ops, though I think that those are less pressing for 1.0, which should probably have a working `~Series[BooleanDtype]`

cc @jorisvandenbossche 

All green. thanks @TomAugspurger  @MeeseeksDev backport to 1.0.x Owee, I'm MrMeeseeks, Look at me.

There seem to be a conflict, please backport manually. Here are approximate instructions:

1. Checkout backport branch and update it.

```
$ git checkout 1.0.x
$ git pull
```

2. Cherry pick the first parent branch of the this PR on top of the older branch:
```
$ git cherry-pick -m1 351760c0655b6c383e449cf857b9a718e3545229
```

3. You will likely have some merge/cherry-pick conflict here, fix them and commit:

```
$ git commit -am 'Backport PR #31183: BUG: Series/Frame invert dtypes'
```

4. Push to a named branch :

```
git push YOURFORK 1.0.x:auto-backport-of-pr-31183-on-1.0.x
```

5. Create a PR against branch 1.0.x, I would have named this PR:

> "Backport PR #31183 on branch 1.0.x"

And apply the correct labels and milestones.

Congratulation you did some good work ! Hopefully your backport PR will be tested by the continuous integration and merged soon!

If these instruction are inaccurate, feel free to [suggest an improvement](https://github.com/MeeseeksBox/MeeseeksDev).
                