Add unit tests on larger data sets.

The goal is to test more complex aggregation trees, array growth, corner-case
aggregations (eg. overlapping ranges), etc.
- introduced BucketsAggregator as a base class for all the buckets aggregators
- removed unused BucketsCollector
- fixed the unmapped related tests for the calc aggregators
- cleanup
Cleanup buildAggregation on sub PER_BUCKET aggregators.

The idea is the following: the only bucket ords that you can receive in
buildAggregation are either between 0 and estimatedBucketCount for
fixed-size bucket aggregators that pre-allocate buckets (eg. range aggs)
or created on the fly and in that case buildAggregation only gets called on
buckets that have been fed with data (eg. terms aggs). So if you make sure that
your buildAggregation can be called on any bucket that has received data or is
between 0 and estimatedBucketCount, everything works fine.

The major change of this commit is in AggregatorFactories, where aggregators are
now allocated eagerly between ords 0 and estimatedBucketCount, and where
buildAggregation doesn't perform any check on the bucket ord anymore since we
know there is an aggregator allocated for the provided bucket ord.
- added an assertion on the range aggregator (values source must not be null)
Fix serialization of long buckets: values can be negative which is not supported by read/writeVLong.
- added support for empty aggregations. now the aggregator knows how to create an empty aggregation, for cases where empty buckets (and their sub-aggregations) need to be returned
- fixed a bug in histogram with "compute_empty_buckets" in cases where the execution was on a single shard
- fixed a bug in missing aggregator where it was bounded only to bytes base value context (now it works on value contexts of any type)
- fixed the aggregation context so values source will always be created as long as the value source config is valid. Now aggregators can be based on the generic ValueSource class of which values will be treated as bytes