Add support for tables with sampled data
Optimizations for sampled data

* Run aggregates directly on sampled data
* Pull materialization up through JOINs and UNIONs
Add more optimizations for sampled tables

Pull materialization up through:
* filter
* project
* top N
* sort
* limit
* semi join
* mark distinct
Move table creation into DistributedLogicalPlanner
Add support for writing sampled tables

* Add method to connector SPI to indicate if the connector supports storing sampled data
* Implement storing sampled data in the native store
* Add benchmarks for queries over sampled data

Benchmarks show that the materialization optimizer makes queries on sampled data (with a weight of 2) 118% to 682% faster

Benchmarks without optimizer:
sampled_sql_groupby_agg_with_arithmetic  :: 3739.602 cpu ms :: in    6M,   189MB,    1.6M/s,  50.5MB/s :: out     2,     30B,       0/s,      8B/s
sampled_sql_count_agg                    ::   28.461 cpu ms :: in  1.5M,  12.9MB,   52.7M/s,   452MB/s :: out     1,      9B,      35/s,    316B/s
sampled_sql_join_with_predicate          :: 2371.573 cpu ms :: in  7.5M,   180MB,   3.16M/s,    76MB/s :: out     1,      9B,       0/s,      3B/s
sampled_sql_double_sum_agg               ::  180.579 cpu ms :: in  1.5M,  25.7MB,   8.31M/s,   143MB/s :: out     1,      9B,       5/s,     49B/s

Benchmarks with optimizer:
sampled_sql_groupby_agg_with_arithmetic  :: 1008.255 cpu ms :: in    6M,   189MB,   5.95M/s,   187MB/s :: out     2,     30B,       1/s,     29B/s
sampled_sql_count_agg                    ::   12.934 cpu ms :: in  1.5M,  12.9MB,    116M/s,   995MB/s :: out     1,      9B,      77/s,    695B/s
sampled_sql_join_with_predicate          :: 1005.354 cpu ms :: in  7.5M,   180MB,   7.46M/s,   179MB/s :: out     1,      9B,       0/s,      8B/s
sampled_sql_double_sum_agg               ::   22.906 cpu ms :: in  1.5M,  25.7MB,   65.5M/s,   1.1GB/s :: out     1,      9B,      43/s,    392B/s
Add unit tests for MarkDistinctOperator and MaterializeSampleOperator
Add optimization for DISTINCT LIMIT queries over sampled data
Refactor TableWriterOperator to take output types in the constructor
Address comments on pull request

* fix optimization of LEFT, RIGHT, and OUTER joins
* fix optimization of UNION
* fix a bunch of stylistic issues
* add more tests
Change filter operator and expression compiler to handle pages with zero channels
Run all AbstractTestQueries over sampled data with a weight of 1
Add checkstyle rule for colon in foreach loops
Refactor sampled test queries into a separate abstract class
Distribute splits evenly among nodes
Experimental support for approximate queries

Currently only AVG is supported. The syntax is:
SELECT AVG(a)
FROM my_sampled_table
APPROXIMATE AT 95.0 CONFIDENCE

This is disabled by default, but can be enabled with the config option analyzer.approximate-queries-enabled=true
Ensure all page buffer clients are closed
Update to latest airbase, airlift and discovery
Move TestingPrestoServer from test to main
Make primary JDBC artifact standalone
Move Input from client to presto-main

It's not needed by the client (yet). We may move it back later if we decide to expose
this info to clients in a structural way