PERF: Improve performance in rolling.mean(engine=numba)
- [x] tests added / passed
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing_codebase.html#pre-commit) for how to run them
- [x] whatsnew entry

This also starts to add a shared aggregation function (sum) that can shared between rolling/groupby/DataFrame when using the numba engine.

```
df = pd.DataFrame(np.ones((10000, 1000)))
roll = df.rolling(10)
roll.sum(engine="numba", engine_kwargs={"nopython": True, "nogil": True, "parallel": True})
%timeit roll.sum(engine="numba", engine_kwargs={"nopython": True, "nogil": True, "parallel": True})

211 ms ± 12.2 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) <- PR
424 ms ± 9.23 ms per loop (mean ± std. dev. of 7 runs, 1 loop each) <- master

```
great, can you make sure that we have sufficient benchmarks

e.g. 
- cython vs numba parallel=True & False
- small number of cols vs large number