Add projectStrict to FieldPartitioners and add tests.

FieldPartitioner#projectStrict is like project, but it returns a
Predicate that accepts a partition value only if the original predicate
would accept all source values that produce the partition value. This is
the "strict" analog of the project method, which accepts a partition
value if there exists a source value that would have been accepted that
produces it.

This also adds more thorough tests for project and projectStrict, as
well as some bug fixes.
Update FS implementation to minimize entity constraints.
If no constraints, use Predicates.alwaysTrue.