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.
Serializable is an interface, so don't we want anything that implements that interface to pass through ? for example the HashSet which is passed in the added test case implements the Serializable interface and hence should be acceptable ?

Or are we enforcing here that the object must implement an interface that extends Serializable interface ? Just wondering why make it generic parameter here.