REF: separate out ShallowMixin
- [x] closes #28938
- [x] passes `black pandas`
- [x] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`

Stops catching DataError in the 1D case for _aggregate_multiple_funcs.  This change is mostly unrelated, but shares the process of reasoning about what cases need _shallow_copy/DataError.
thanks @jbrockmendel 