Fix grouping semantics

In the last release of Presto when we wanted equals or hashCode we would do something like this:
```java
  block.hash(position)
```
In the new code I changed all of these to:
```java
 type.hash(block, position)
```
The problem is the block was handling nulls, but the Type code does not.  This pull request consolidates the uses of equals and hashCode for Type and updates these places to handle null.

To simplify the code generation I've added a ByteCodeExpression abstraction to the byte code library.  The abstraction is described in the commit.