Change QueryResult to retain column value types

https://issues.cask.co/browse/CDAP-384
Since a Hive query result row only contains objects of primitive types, we define a new QueryResult.ObjectResult that holds the type and the primitive value.

Bamboo build: https://builds.cask.co/browse/CDAP-DUT114
You don't need that many constructors. You can have a private constructor and a static method:

```java
public enum ResultType {
  BOOLEAN(Boolean.class),
  ...

  private static Map<Class<?>, ResultType> types;

  static {
    types = Maps.newIdentityHashMap();
    for (ResultType type : ResultType.values()) {
      types.put(type.cls, type);
    } 
  }

  private final Class<?> cls;
 
  private ResultType(Class<?> cls) {
    this.cls = cls;
  }

  static ResultType of(Class<?> cls) {
    ResultType type = types.contains(cls);
    Preconditions.checkArgument(type != null, "...");
    return type;
  }
}

public static ResultObject of(Object value) {
  return new ResultObject(ResultType.of(value.getClass()), value);
}

private ResultObject(ResultType type, Object value) {
  //...
}
```