Simplifies the filter AST and makes filter chains work

Adopting a different strategy, the filter AST now does only one filter
iteration per filter.

It works by inserting the initial event in an array called `events` and
then, for each filter:

1. Apply to all events in `events`
2. Add new events and remove cancelled ones from `events`
3. Return if `events` is empty

Once out of the loop return the `events` array w/o the original event