POC: aggregate always aggregates
- [x] Ensure all linting tests pass, see [here](https://pandas.pydata.org/pandas-docs/dev/development/contributing.html#code-standards) for how to run them

Proof of concept to show what it would take for #35725 (needs tests, docs, and some comments cleaned up). I wanted to make sure the desired behavior has a viable path before deprecating. I'm planning to put up a PR to deprecate for #35725 in the next week or so, but since this seems to be a somewhat substantial behavior change, I'm wondering if it should be behind an option so that users can opt-in earlier and restore previous behavior for at least 1 release after the deprecation takes effect.

This makes any call to `*.agg` aggregate. For example:

     pd.DataFrame({'a': [1, 1], 'b': [2, 2]}).agg(lambda x: x)

will return a Series with 2 rows whose entries are Series themselves. On master, this would be a no-op. Some notes:

 - GroupBy.aggregate is now almost entirely handled by either core.apply or _python_agg_general. The only case that isn't is where the result is empty; this should be able to be simplified.
 - Also closes #39169, #39436
 - Closes the agg portion of #38042
 - Series.agg no longer uses "try ser.apply(f), fallback to f(ser)"; it just does the latter now.