Cast event filter arguments once up-front

...rather than in eventFilter itself. This doesn't appear to have any
direct impact on either behavior or performance - but it does make it
clear to the callers what amount of data is really being worked with,
and paves the way to trying a by-reference passing of an EventData
struct to the filter instead of pulling out fields from that struct
before the pass.
Pass EventData struct by reference to eventFilter()

...doesn't seem to have any discernable impact on performance on way or
the other, but I do conceptually like the move passing an event to the
filter rather than some set of the event's properties.