Add Range#toString and Range.fromString methods.
Add Predicates toString and fromString methods.

Range and In are handled directly, other predicates will use
RegisteredPredicate to register a factory for a name. Registered
predicates are converted to "name(<...>)" strings, where name is a
registered name and the inner part is produced by toString. Exists is
now a RegisteredPredicate.
Move predicate classes into new spi.predicates package.
Add View URI support.

* Add View#getUri()
* Add Constraints to/from query map
* Use Constraints.fromQueryMap in Datasets to build views
* Add URIBuilder constructor for dataset or view URIs
* Add URIBuilder support for Constraints#toQueryMap
CDK-501: Use view URIs in kite-data-mapreduce.
CDK-501: Add tests for Predicates toString, fromString.
CDK-501: Add URL encoding for URI string predicates.
CDK-501: Remove inf from unbounded ranges.

This implements Tom's suggestion to use the empty string to signal a
missing bound rather than "inf". This only collides with String bounds,
where the empty string is a valid bound. But, the only behavioral
difference is that the empty string itself is included in the range and
it is no longer possible to express a from-after in terms of the empty
string or the range upTo("").
CDK-501: Add more view URI tests.

This uses local file dataset URIs to test, but the test applies to any
implementation that uses AbstractRefinableView. Introducing a test
dataset, view, repository, and URI pattern to make this slightly more
generic wasn't worth the work.

This fixes URIBuilder; when constraints are empty, the URI should be a
dataset URI. Also fixes AbstractDataset, which should implement equals
and hashCode to make these tests work.
CDK-501: Change exists predicate to special case.

The exists predicate is now represented in a view URI as "field=",
instead of "field=exists()". The less-common case, matching the empty
string, is now represented as "field=in()".
CDK-501: Add fixes from Ben's review.