Inline unnecessary byte code Variable interface

Remove unused VariableFactory abstraction
Add ByteCodeExpression abstraction

A ByteCodeExpression is chain of Java like expressions that results in a single
value being pushed on the stack.  The chain starts with a constant, local
variable, static field, static method or invoke dynamic followed followed by
zero or more invocations, field dereferences, array element fetches, or casts.

A ByteCodeExpression is a ByteCodeNode so it works with tools like tree dump.

This abstraction makes it easy to write generic byte code generators that can
work with data that may come from a parameter, field or the result of a method
invoation.
Add SqlTypeByteCodeExpression
Adapt ByteCodeUtils to ByteCodeExpressions
Fix grouping semantics in JoinCompiler

Simplify JoinCompiler by using ByteCodeExpression to consolidate common sequences.
Fix grouping semantic in GroupByHash

Rewrite GroupByHash using compiled PagesHashStrategy
Remove unused TwoChannelPagesHashStrategy
Add hashRow to PagesHashStrategy

Replace manual hash calculationis with PagesHashStrategy.hashRow which is compiled
Remove unused equals and hashCode methods from PagesIndex
Rewrite ChannelSet using GroupByHash
Add utility methods for equals and hash of type

Utility methods performn equals and hash code of sql values with respect for nulls