Call by copy in Listener and Filter

Instead of copying over Event_type*, copy over Event_type. Use
Event_type* instead of Event_type as template argument when using these
interfaces.

This change is useful because you can use a `Listener< std::shared_ptr<
Event_type > >` (or Filter) instead of `Listener< Event_type* >`