Results from a query are now sorted by default by being added to a SortedDataPointGroup. This uses a tournament tree to sort as you iterate (not up front). Since results are already sorted, there is no need for the SortAggregator. This allowed for a simplification of the aggregator interface. The aggregate method now takes a DataPointGroup rather than a list of DataPointGroups.
The query results now returns the group by information and the results of the group by.  This is a refactoring in preparation for adding groupby for time and value.
Now group by all GroupBys. Currently the tags are not correctly represented for each group because of performance problems.