PARQUET-116: Pass a filter object to user defined predicate in filter2 api

Currently for creating a user defined predicate using the new filter api, no value can be passed to create a dynamic filter at runtime. This reduces the usefulness of the user defined predicate, and meaningful predicates cannot be created. We can add a generic Object value that is passed through the api, which can internally be used in the keep function of the user defined predicate for creating many different types of filters.
For example, in spark sql, we can pass in a list of filter values for a where IN clause query and filter the row values based on that list.
lets change the above to:
```
public abstract class UserDefinedPredicate<T extends Comparable<T>, S extends Serializable> {
  public UserDefinedPredicate(S state) { }
```

then the keep method doesn't need to take an extra arg?