BUG: df.agg(sum, axis=1) uses different method than when axis=0
- [x] closes #21134
- [x] xref #21123
- [x] tests added / passed
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [x] whatsnew entry

This is a splitoff from #21123, to only fix #21134. #19629 will be fixed in a separate PR afterwards.

Passing builtins to ``df.agg`` is ok when ``axis=0``, but can give wrong result, when ``axis=1``  when NaNs are supplied.

Explanation
-------------
Passing the functions in ``SelectionMixin._cython_table`` to ``df.agg`` should defer to use the relevant cython functions. This currently works as expected when ``axis=0``, but not always when ``axis=1``.

The reason for this difference is that ``df.aggregate`` currently defers to ``df._aggregate`` when ``axis=0``, but defers to ``df.apply``, when ``axis=1``, and these give different result when passed funcions and the series/frame contains Nan values. I've solved this by transposing df in ``_aggragate`` when ``axis=1``.

The tests have been heavily parametrized, helping ensure that the various ways to call ``df.agg`` now give correct result.