Fix EntityAccessor for read schemas from AllowNull.

The EntityAccessor assumes that the dataset schema has no nullable
record fields for partition source data, which is validated by the
descriptor checks. However, when using reflected records with Schemas
generated by AllowNull, this may not be the case even though the
descriptor has validated correctly. This adds support to skip nullable
unions.
CDK-446: Add provided partitioner.

This adds ProvidedFieldPartitioner, which is a partitioner that has no
source field. Constraints for this partitioner are specifically ignored
when applying predicates to entities because there is no connection
between the entity data and the partition predicate. However, predicates
for provided partitioner fields do apply when filtering FS partitions
because the data is present.

The provided partitioner allows 3 value types: string, int or long.
The new test for partition iterators with provided partitions tests that
these types are required when building Constraints and values from
partition paths are correctly coerced. The value type will be defaulted
to string if no type is specified.

To enable writing to provided partitions, Constraints has been updated
to keep track of "provided" values. Any value uniquely set in the
Constraints is considered provided. For example, ds.with("version", 34)
considers 34 a provided value for "version". The provided values are
then passed to the accessor when it builds StorageKeys and correctly set
if the partitioner type is a provided partitioner. This is tested for
the FS implementation in TestPartitionedDatasetWriter.

The partition strategy parser, builder, etc. have been updated for the
new partitioner type. The value type is represented as a "values"
property of the JSON partitioner object that can be "string", "int", or
"long". This corresponds to the Avro types' short-hand.
CDK-446: Add provided partitioner to CLI partition-config.
CDK-446: Add provided partition strategy for Hive.

This adds a conversion from Hive's partition columns to a partition
strategy using provided partitioners. This will allow Kite to read any
partitioned Hive table backed by avro or parquet that has the Schema
properties set correctly.