Implement the IN operator for predicates
Add tests for more types of invalid predicates
Add RLMDynamicCast

Returns the object cast to the given type if it's of that type, and `nil`
otherwise. Cuts down on the usage of `id`, consolidates the type check and
downcast used in a bunch of places to avoid accidentally having them not match,
and makes it easier to create variables of the downcasted type.
Add a better error message for non-constant values in predicate aggregates

Previously it asked the user to implement -constantValue in the concrete
predicate type they happened to pass in.