Consistent Naming Standard When Using Dict in GroupBy .agg
- [X] closes #21790
- [] tests added / passed
- [X] passes `git diff upstream/master -u -- "*.py" | flake8 --diff`
- [ ] whatsnew entry

This is a WIP as all of the tests in the groupby directory pass, but there are some outside of that which need touch ups. This is a relatively aggressive change so I figured I'd get buy in before going outside of that to modify tests.

This not only addresses the referenced issue but provides consistent expectations around columns returned when using a `dict` argument in a `DataFrameGroupBy`, namely that the returned object will have a `MultiIndex` where the top level is the column name and the subsequent level is the aggregation performed.

To play devil's advocate, this may be considered undesirable as it now returns a MultiIndex in *some* cases where that was flat before. However, I'd counter that this:

- Behavior is more consistent and easier to communicate
- Provides a return value whose column labeling is less ambiguous AND
- Simplifies the code base, providing us a clear path forward for whatever the renaming solution actually SHOULD be

Curious to hear other's feedback @jreback @TomAugspurger @jorisvandenbossche 