Summary
When a predicate targets a dictionary-encoded column, evaluate the predicate against the dictionary values before decoding any data pages. If no dictionary values match, the entire column chunk can be skipped (AllFalse). If all match, per-row evaluation can be skipped (AllTrue).
This adds an evaluate_dictionary method to the ArrowPredicate trait and integrates dictionary pruning into the row group filter evaluation pipeline.
Related PR: #9574