feature/filter flushing execution

this PR from the shared branch will replace #1260 

this should implement correct behaviour for filter flushes.

```
filter {
  one { }
  if ... { two { } }
  else { ... }
  three { }
}
```

In the above, if 'two' emits an event periodically (via flush), then *only* 'three' should receive it.
we have the noop filter, the spool is basically the same but with flush, it's actually a good example of how to implement flush...