Deferred aggregation

New BucketCollector classes to aid the recording and subsequent playback of "collect" streams in aggs  to reduce combinatorial explosions where pruning of parent buckets should occur before calculating child aggs. 
Aggregator base class now wraps the subAgg BucketCollectors with any required caching of collect streams for sub aggregations that are indicated as being deferred. Aggregator subclasses should now override `shouldDefer` to indicate any aggs that are expensive to compute and in the BuildAggregation call should subsequently call `runDeferredCollections` with the subset of bucket ordinals that represent the pruned parent buckets of interest.