Declare "this" variable with correct type
Inline unnecessary byte code Variable interface

Remove unused VariableFactory abstraction
Merge byte code Variable and LocalVariableDefinition
Add simple name to ParameterizedType
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 ByteCodeExpression
Remove unused TwoChannelPagesHashStrategy
Remove unused equals and hashCode methods from PagesIndex
Fix grouping semantics in JoinCompiler

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

Rewrite GroupByHash using compiled PagesHashStrategy
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
Simplify OrderingCompiler
Simplify JoinProbeCompiler