PERF: Improve efficiency of `BlockValuesRefs`
- [ ] closes #xxxx (Replace xxxx with the GitHub issue number)
- [ ] [Tests added and passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#writing-tests) if fixing a bug or adding a new feature
- [ ] All [code checks passed](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit).
- [ ] Added [type annotations](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#type-hints) to new arguments/methods/functions.
- [ ] Added an entry in the latest `doc/source/whatsnew/vX.X.X.rst` file if fixing a bug or adding a new feature.

Improve efficiency of `BlockValuesRefs` by allowing for more efficient C code-gen
@Tolker-KU - can you run and post [ASV results](https://pandas.pydata.org/docs/dev/development/contributing_codebase.html#running-the-performance-test-suite) > @Tolker-KU - can you run and post [ASV results](https://pandas.pydata.org/docs/dev/development/contributing_codebase.html#running-the-performance-test-suite)

Thanks for taking a look a this.

I've tried hard to get meaningful runs of the asv benchmarks but I think my computer is so old and slow that noise is dominating the results. I'm getting weird results where some benchmarks are much faster and some are much slower

To show the gains from this I've run below micro-benchmark

```python
>>> N = 10_000
>>> arr = np.random.normal(size=(50, N))
>>> df = pd.DataFrame(arr)
>>> %timeit -n10000 list(df.iterrows())
2.43 ms ± 268 μs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)  <- before
2.1 ms  ± 117 μs per loop (mean ± std. dev. of 7 runs, 10,000 loops each)  <- after
``` Thanks @Tolker-KU 