PERF: regression in DataFrame reduction ops performance #37081
- [x] closes #37081 
- [x] tests added / passed
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`

Made the change proposed by @jorisvandenbossche in https://github.com/pandas-dev/pandas/pull/35881#discussion_r504035006 

Did a very quick comparison : 

With `self.dtypes` (old version) : 

```
In [8]: values = np.random.randn(100000, 4)   
   ...: df = pd.DataFrame(values).astype("int") 
   ...: %timeit df.sum() 
714 µs ± 21 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
```

With `self._iter_column_arrays()` (new version) : 

```
In [4]: values = np.random.randn(100000, 4)   
   ...: df = pd.DataFrame(values).astype("int") 
   ...: %timeit df.sum() 
477 µs ± 8.7 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
```
> do we have an asv that covers this case, if not can you add one?
> 
> this doesn't need a note as its on master.

I believe we do : 

https://pandas.pydata.org/speed/pandas/#stat_ops.FrameOps.time_op?p-op='sum'&p-dtype='int' Indeed. Jeff, see the issue, it was actually catched thanks to our asv suite Should i do something about the : 2 failed azure pipelines ?
Looks like they're failing on master too and the `./ci/code_checks.sh` localy return no error.

 thanks @ukarroum 