Make all event drivers final and use the concrete derived type internally. See #675.

Avoids the need for many virtual function calls to the driver.