CDK-446: Add provided partitioner

This adds a "provided" partitioner that can work with partitions that are not connected to source fields on the entities stored in a Dataset. The new partitioner type requires a backing type that is used to validate constraints and to deserialize values from paths or partition keys. This type can be "int", "long", or "string" and defaults to "string".
Mainly consistency with the string-based formats. I think simple types that match Avro are the correct choice for the JSON strategy format. It is also the best choice in my opinion for the partition fields so we don't end up with a `Class.forName` call in the partition expression code. Given the choices for those formats, it makes sense to use the same thing here rather than picking something different.