DRILL-365: Support for date and time data types

Add new value vectors and holders for the following data types

Date
DateTime
TimeStamp
Interval

Instead of a bi directional map use an array and a hash table for faster retrieval of timezones
Add joda-time dependency to java-exec pom

Cast functions between Date, DateTime and TimeStamp

Comparison functions for Date, DateTime, TimeStamp and Interval

Date, DateTime, TimeStamp comparison functions are simple long comparisons.
Interval comparisons include normalization and comparison of each duration we store (months, days, milliseconds)

Add Time data type
Comparison functions for Time

Expression parser changes for Date, DateTime, Time and TimeStamp

Added a new field to the MajorType, timeZone

Cast functions from String to Date, DateTime, TimeStamp, Time

Temporary workaround: Make the scope of functions to set the value vectors with NullableHolder as one of the inputs as 'public'. Will need to remove this once JIRA-364 is resolved

Cast functions from Date, DateTime, Time, TimeStamp to String

Added capability to define date, datetime, time,  timestamp, interval type literals
Added a sample function "date_add" that adds a date and an interval

Use int for Time type instead of long

Cast functions from VarChar to Interval to support the ISO standard format to represent Interval

Add unit tests
Minor bug in definition of datetimetype() function

Add functions current_date(), current_time(), current_timestamp()

As per sql standard these functions should return the same value no matter when they are run during the duration of the query. So we generate the current time initially once and propagate it to the plan fragments. Added a new variable query_start_time in BitControl.proto for this purpose.

FragmentContext grabs it from the PlanFragment and stores it in its class and exposes it as a function.

Minor bug fixes to DateTypeFunctions