Making Event abstract

We don't want anyone creating instances of Event directly, because they
wouldn't be able to do anything with them. The EventSink and EventLoop
are concrete implementations that should be used to construct an
instance of type Event