Implement numeric_histogram aggregation function

This is a function for computing approximate histograms based loosely on

    Yael Ben-Haim and Elad Tom-Tov, "A streaming parallel decision tree algorithm",
    J. Machine Learning Research 11 (2010), pp. 849--872.

It supports the following signatures:

- numeric_histogram(bigint buckets, double value, double weight) -> map<double,double>
- numeric_histogram(bigint buckets, double value) -> map<double,double>

The second variant is a shorthand for weight = 1
this is always called with `maxBuckets`. I would inline this into `compact()` and change callers