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.

This commit also changes MultiFileDatasetReader's constructor to use an
Iterable, i.e. PathIterator, rather than a List and adds checks for
nulls in other FS reader classes.
CDK-177: Moving ReaderWriterState to SPI.
CDK-177: Adding FileSystemView implementation.

FileSystemView implements a View defined by a single MarkerRange. It
implements all View methods other than union(View). FileSystemDataset
now delegates all View methods, like newReader, to its internal
unbounded FileSystemView.

Existing Dadtaset tests are passing, but new tests for range limiting
have not been added for FileSystemView.