Add session to ConnectorMetadata calls

This is an alternate implementation of pull request #1159  The main difference
being this code add Session to each metadata function not involving a handle,
instead of making ConnectorMetadata a stateful instance. The session is not
passed to handle based methods and instead any connector needing session data
would need to store the session in the handles. This is consistent with the
handle design of other methods.
Add session to HiveTableHandle and HiveSplit
Rename HiveRecordCursor timeZone field to hiveStorageTimeZone
Write timestamps in SQL format in Hive JSON code

When converting structural types to JSON write timestamps using the standard SQL format.
Fix deserialization of metadata in example plugin
Add automatic support for identity casts to FunctionRegistry
Add support for generic type literals to LiteralInterpreter

When an expression is serialized the literal values must be turned back into nodes, and
previously this required a custom function hard coded for each type.  The commit adds
support for any generic type to be serialized properly without custom code
Remove unnecessary guards from FunctionAssertions

Now that nulls and type promotion are handled correctly, remove guards that
ignored some exceptions in FunctionAssertions
Fix quarter date time function for issue #1220