Not super happy with this design, but didn't want to introduce another user-facing abstraction, even if the `on`/`name` lifetimes don't quite line up with the rest of `AggregateFn`. Ideally, we'd have an `Aggregation` class that would hold `on` and `name` along with an `AggregateFn` instance (which would just have the `init`, `accumulate`, `merge`, `finalize` fields).