New macro ADD_LISTENER2

ADD_LISTENER2 allows to add listener based on generic object names.
The object name of ADD_LISTENER must match the pattern m_##<type>.
Refactor window callback.

Now the virtual function on the WindowCallbackBase returns the instance
of the callback object.

Also, it does not holds the object pointer anymore, so the setup member
function can be called any number of times.
Added support for full screen switching.
Fixed: destroy pending callback objects when the window is destroyed.

The redraw events of wayland are sent through wl_callback::done events.
When we destroy the window, we should also destroy the respective
callback objects of the pending 'done' events. This prevents the events
arriving to an already deleted window object.