Issue #3598730: Cache views that use more than one date filter
Merge the two single-filter cache plugins into one. The plugin now lets you tick one or more of a view's date filters; the cache expires at the soonest moment any of them is next due to add or drop an item. This covers archive (less-than), upcoming (greater-than) and "currently running" views (a less-than and a greater-than filter together, e.g. on a daterange's start and end columns) in a single plugin, with the direction worked out per filter.
- One look-ahead query handles all four operators (< <= > >=): the boundary is the earliest value on the future side of the filter's threshold. Each ticked filter is measured on its own and the soonest wins; if any can't be worked out, caching is disabled; filters with nothing waiting drop out as permanent.
- Exposed (and grouped) filters aren't offered, since their value is per visitor; the empty-state message points to Tag based caching for those.
- The options form is a checkbox list of the view's date filters, and a scalar date_filters value is tolerated (treated as a single filter).
- Remove DateFilterLessThan and DateCacheBase; fold everything into DateFilter.
- post_update migrates existing views: date_filter_less_than -> date_filter and the single date_filter string option -> a date_filters list.
- Replace the per-plugin tests with one DateFiltersTest plus a migration test.
Closes #3598730