Introduce IEvent

Use an interface rather than a concrete type.

This should allow us to add some more properties to the concrete `Event` type for testability purpose (cf #10)