BUG: fix TypeErrors raised within _python_agg_general
cc @jreback @WillAyd 

There are a few ways in which we incorrectly raise TypeError within _python_agg_general that this fixes.

A lot of the complexity in this code comes from the fact that we drop columns on which a function is invalid instead of requiring the user to subset columns.
This does conflict with #29124 - wonder if that would have any material impact on exception catching here (maybe, maybe not)