Fix handling of Hive maps with null keys
Update connector documentation
Add parser tests for comments
Add splitter method to detect empty statements
Cleanup method declarations
Fix CLI development profile
Fix handling of empty statements in CLI

Statements that only contained comments were not handled properly
by the CLI: they were sent to the server for execution, which
legitmately rejected them as not containing a valid statement.
The CLI now skips such logically empty statements.
Require terminated statements from files in CLI

Previously, the CLI would automatically terminate the last statement
read from a file. A non-terminated statement will now result in an
error. This is because there is no way to detect if the partial
statement is intended or if it is the result of an error condition
such as a broken pipe.

For example, consider the following statement:

    SELECT * FROM t
    WHERE id = ...;

Suppose an external program was feeding this statement to the CLI
using a pipe that was broken after the first line. This would result
in the following statement being executed:

    SELECT * FROM t
    ;

Such a semantic difference could have disastrous consequences,
especially when combined with data modification commands (which we
plan to support in the future).
BlockBuilder should use underlying slice size
Implement simple version of greatest/least

Only 2-arg versions for common types: double, bigint, timestamp (with tz), date

Once we support varargs we'll replace them with a generic version.
Minor cleanup and (potential) optimization in compiler

Currently, the code generates calls to getCursor for every channel from 0 up to the
max channel referenced in filters/projections. With this change, the code now only
calls getCursor on channels that are actually needed for evaluation.
Rename getHandle() to getSignature() in FunctionInfo
Revert "Minor cleanup and (potential) optimization in compiler"

This change introduced a bug but didn't cause unit tests to fail due to
automatic fallback to interpreter if compilation doesn't work.

This reverts commit 59e0cbabf465563c111350de9896e7019a81f01b.
Add config option to disable interpreter fallback

The option is compiler.interpreter-enabled. When set to false, if the engine
fails to compile an expression to bytecode, the query will abort instead of
falling back to interpreted mode.

LocalQueryRunner and DistributedQueryRunner are now configured with that option
off so that we can catch certain subtle bugs in the compiler during unit testing .
Minor cleanup and (potential) optimization in compiler

Currently, the code generates calls to getCursor for every channel from 0 up to the
max channel referenced in filters/projections. With this change, the code now only
calls getCursor on channels that are actually needed for evaluation.

This is a re-do of 59e0cbabf465563c111350de9896e7019a81f01b (reverted in 87981e7bccfabacb001973193c4b7f120cc308a5)
with the bug fixed.
Consolidate FunctionInfo and OperatorInfo

This is a precursor to the new expression tree. The goal is that
at the core, operators and functions are both represented in the
same way and only the sql metadata layer is aware of the distinction
between them.
Remove unused methods
Move ensureCapacity to grouped state interface
Convert BooleanMin and Max to use new aggregation base class
Convert COUNT_IF to use new aggregation base class