Hist objects can now have arbitrary buckets.

Re-wrote folding and updating for Hist objects. The generation of
the buckets is still static, but their use is more generic now.
Increased warmup rounds for categories benchmark test.

It wasn't showing repeatable results, but now it seems to.
Added methods to optimise foldable results.

I.e. to remove empty buckets and categories from Hist and Cats.
Optimising stats before saving to the database.

This removes all empty histogram buckets, resulting in far fewer
rows being written, and a speed-up for accessing stats data of
about 2 to 6x.
WS: Moved Hist function to be next to Cats.
Removed `optimise` method from `Foldable`.

Now only `Hist` and `Cats` implement it.
Generalised Cats filtering.

Moved filtering functions into `Cats` and `Hist` objects.
Using them for tabular data requests for datasets.
Using generic tablular functions for task results.
Histograms can now have any arrangement of buckets.

An immediate benefit of this is that tabular data can be
optimised before storing in the database, dramatically reducing
the number of rows that are created and improving tabular data
IO speed.

Long-term, this means we can have categorical data and different
bucket scales (e.g. non-logarithmic).

Merge branch 'feature-flexible-hist' into akka-workers