ISPN-3917 Filter objects using the query DSL (without using an index)

Implement an efficient boolean predicate index that is used to evaluate queries directly against non-indexed data.
Basically instead of indexing the data stored in the grid we resort to indexing the filters in such a way that
a large number of filters can be executed efficiently. The data can be either Java objects accessed via reflection
or binary encoded Protobuf data.