UDF methods overhaul
For methods that accept UDFs, I've been looking at a number of issues that would involve long-standing behavior changes, some I feel are quite significant:

 - .agg should always reduce #35725
 - Series.transform and DataFrame.transform should broadcast reduces (like groupby does) #18103
 - Series.apply and DataFrame.apply use agg for list/dict arguments
 - Series.agg and DataFrame.agg use apply if argument is a UDF
 - UDF method arguments are inconsistent #40112
 - Make groupby.apply dumb #39209
 - groupby.apply includes grouping column(s) in computation unlike groupby.agg/groupby.transform
 - Series.agg and DataFrame.agg don't allow partial failure when TypeError is raised #40539
 - Ban mutation from UDF methods #12653
 
For some of these, it is difficult to emit a FutureWarning. For example, I'm not sure how we would emit a warning changing the behavior of agg for UDFs. I've been working toward consolidating the methods for apply/agg/transform et al in `pandas.core.apply`, resolving consistencies as they are encountered. This is very much a work in progress, and I expect to encounter more.

In order to make better progress here, I'd like to work on a new, experimental, implementation behind an option similar to ArrayManager. Progress can then be made without worrying about deprecation warnings and changing behaviors. When it's ready, we can then progress as:

 - Add docs on the option and users can opt-in. 
 - Change the default of the option to no-default, emitting a FutureWarning when not set that the behavior of many methods will change and that users should use the new implementation.
 - Change the default of the option to the new implementation, keeping the option to allow users to change back if necessary.
 - Remove the option and old implementation.