Prefer empty() over size()
Added initial support for displaying on Wayland compositors.

SDL and X11 builds are disabled when using the --enable-wayland
switch.

EGLNativeTypeWayland is an implementation of EGLNativeType which
connects to a running wayland compositor if possible and starts
rendering in a new surface.

WinEventsWayland polls the wayland display for new events and updates
the main surface.

The wayland client libraries are loaded dynamically and their functions
should not be used directly. Instead, IDllWaylandClient should be injected
into any objects that need to call functions in those libraries. Because
the autogenerated protocol functions are inline in the header files
and not available to be looked up, the protocol needs to be used directly.

Some of the helpers there are:

 1. wayland::protocol::CreateWaylandObject -> creates a wl_proxy casted
    to the result type with a specific wl_interface as looked up in
    the client library.
 2. wayland::protocol::CallMethodOnWaylandObject -> calls wl_proxy_marshal
    with on the proxy with the specified opcode and arguments
 3. wayland::protocol::AddListenerOnWaylandObject -> adds a wl_listener
    to the wl_proxy
 4. wayland::protocol::DestroyWaylandObject -> calls wl_proxy_destroy
    on the proxy.

There may be some cases where additional constructor or destructor functions
might need to be called before or after CreateWaylandObject and
DestroyWaylandObject. Developers should consult the autogenerated
wayland-*-protocol.h headers to determine the expected call order.

There is currently no support for keyboard input, mouse input or
multiple monitors.

EGLWrapper dereferenced the native display and window types when passing it
to eglGetDisplay and eglCreateSurface. That would result in the first member
of wl_display * or wl_egl_window * being passed to those functions, which would
usually cause problems later. These have been changed to not dereference the
pointer
Added support for multiple outputs and go fullscreen by default.

Created new object xbmc::wayland::Output to wrap wl_output. Gather
all the available modes and report thoses in ProbeResolutions. Resize
the window in SetNativeResolution and set a new opaque region for it.

Remove all outputs on DestroyNativeDisplay()
Added basic input framework.

Added xw::Seat to wrap wl_seat and WaylandInput to be the central
control object for keyboard and mouse input.

EventListener is a pure virtual class that WaylandInput delegates
to. EventDispatch implements EventListener and forwards input
and focus events on to XBMC.

Let WinEventsWayland manage the wl_seat * from EGLNativeTypeWayland
once it appears
Added support for pointer events and hide the system pointer.

Created classes xbmc::wayland::Pointer to wrap wl_pointer and
xbmc::PointerProcessor implementing xbmc::wayland::PointerListener
which contains the logic for converting wayland button and pointer
events into xbmc events.

Made xbmc::wayland::Seat wait for a pointer to appear and initialize
a pointer in WaylandInput.

Call wl_pointer_set_cursor as soon as the pointer enters our surface
as it is undefined before that.
Listen for a new wl_keyboard from wl_seat_listener and create an
XKBKeymap implementing wayland::Keymap. This class keeps track
of the keyboard state and MUST be updated every time a modifier or
a key is pressed (eg, every time we get an event from the protocol).

KeyboardProcessor implements the logic of converting XKB keysyms to
XBMC keysyms. It also changes the focus state of the window and
delivers key events to the XBMC event subsystem.

TimeoutManager and WaylandEventLoop are just a simple abstraction for
adding timeouts to the poll () / wl_display_dispatch () mainloop, in
place so that we can implement key repeat