CDK-177: Fixing Log4jAppender after keyFor removed.
simplify impl
simplify impl
CDK-202. FileSystemDatasetWriter should flush to HDFS
CDK-197: Adding generic to Dataset.

Dataset is now Dataset<E> because a Dataset stores a type of record.
Before, that type was introduced when Dataset#getReader or getWriter was
called, but with the addition of Views it is now necessary to carry the
type on the Dataset and View for View#contains(E) rather than
View#contains(Object). In addition, this more closely models the data.
It used to be possible to call getReader and getWriter on the same data
set and have differently typed reader and writer objects. Now, both get
the type from the Dataset and View.
CDK-197: Fixing cdk-tools test after adding generic.
CDK-177: Adding Marker Comparator and Range to SPI.

MarkerComparator implements comparison methods between Marker objects to
help implementations work with ranges of partition space bounded by
Marker objects. MarkerRange defines a range between two Marker objects
(that could be the same Marker) with inclusive or exclusive bounds. The
methods for defining a MarkerRange match range construction methods of
View.
Upgraded cdk-morphlines-saxon module from saxon-HE-9.5.1-2 to saxon-HE-9.5.1-3
kudos to Prasanna for his contribution
CDK-207: Formats should support a fromString() method
Add unit test for CDK-207: Formats should support a fromString() method
CDK-177: Adding UNDEFINED range helper.

This adds MarkerRange.UNDEFINED that can be used when there is no
partition strategy so the range is not defined (there is no way to
compare Markers). The implementation correctly throws exceptions when
range-limiting methods are used and returns true for all contains
checks for any Marker or entity.
CDK-177: Adding Conversions SPI class.

The conversion methods for working with user-supplied data were
duplicated between Marker and Key and are generally useful for
conversions like in FieldPartitioner.
CDK-177: Remove Key.Builder, add Key#reuseFor.

When reusing Key objects, a separate builder class was awkward and
introduced unnecessary complexity. This replaces the Builder with two
reuseFor methods that replace all of the Key's values for another Marker
or an entity. The builder isn't needed because they Key already carries
a reference to the PartitionStrategy.
CDK-177: Add Immutable annotation to View.

Dataset is Immutable, so View should be as well.
CDK-177: Add FS partition enumerating util classes.

MultiLevelIterator is an abstract iterator that produces lists of a
given depth in a nested hierarchy, like a FileSystem. The
FileSystemPartitionIterator uses it to enumerate all paths in the
directory structure produced by a partition strategy.

The FS iterator also limits the paths it yields to those within a given
MarkerRange and uses the PathConversion class to convert between Path
and Key.  PathConversion is a replacement for the toDirectoryName and
fromDirectoryName methods that does not rely on FieldPartitioners to
convert between values and strings (instead it uses Conversions).

Also adding a null check to Key.
CDK-177: Add PathIterator.

Given a FileSystem and an Iterable of Paths, PathIterator will yield all
non-hidden file Paths under its set of directories. PathIterator and
FileSystemPartitionIterator make it easy for FS views to iterate through
all files in a given MarkerRange.