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
We can do that too, since we control where the deserialization is done - using GSon in ExploreClient. But then the serialization takes more space, with two attributes instead of one, with Alvin's solution 2). So in the end, which one do you think is better?