Implement Collection::aggregate() helper

This adds a `Collection::aggregate()` method, along with relevant pre/post events.

Additionally, it includes some refactoring to CollectionTest and should facilitate easier testing of event dispatching for other Collection methods down the line.