SPARKC-1: Read UDT column values.
Extract getters from CassandraRow class into ScalaGettableData / JavaGettableData traits which provide getters for Java/Scala APIs. Introduce UDTValue class to represent gettable data of user defined types. Both UDTValue and CassandraRow share the interface for getting data by index or column/field name. Add conversions from non serializable Java driver UDTValue to connector serializable UDTValue. Additionally protocolVersion has been moved to implicit parameter list. Writing UDTs, mapping UDTs to case classes and using UDTs in SparkSQL will be addressed by separate commits.
SPARKC-1: Write UDT column values.

To construct a Java driver UDTValue, a reference to UserType (a subclass of DataType) is required. This UserType instance is available from a PreparedStatement, so the code to obtain a TypeConverter for purpose of saving had to be redesigned and moved. Now TypeConverters for saving to Cassandra are no longer associated with ColumnType instances, because ColumnTypes must be Serializable and therefore cannot embed non serializable DataTypes. Instead, a separate method was added to construct a TypeConverter for given DataType and ProtocolVersion.

 Additionally RowWriter interface has been simplified and now it is responsible only for extracting individual column values from a row object, without applying any type conversions to them, binding the PreparedStatement nor estimating the size.  Instead, that  responsibility has been moved to TableWriter so it can be shared between many different RowWriters (and different row representations). This allows TableWriter to create TypeConverters only once before saving multiple rows, which is faster.
SPARKC-1: Reflect UDT columns in Schema so it is possible to fetch field names and types. Also, provide a proper mapping from Cassandra UDT columns to SparkSQL struct type.