The various aggregation helper methods in src/tmlt/core/measurements/aggregations.py are all used to construct both group-by and scalar aggregations. Those two things don't actually have that much in common: they need different arguments, and produce different types of components - the only shared code is some validation and conversions between different privacy definitions. We should factor out the common code, and rewrite this is two different sets of methods, one of which handles groupby aggregations and one which handles scalar.