Rework GerritEventListener interface, only keep method with GerritEvent

Having one method per type of event is a problem because every time we want
to add a new type, we will break backward compatibility. Brought back
reflection removed a long time ago to allow GerritEventListener implementors
to define method taking a specific type as argument and this method will
be called instead when an event of the specific type is received.

Also clean up duplicated code related to event processing in GerritTrigger.