Fix possible racey crash after surface destruction

Change-Id: Ic9f231fc6935d787f4d6aa6f69725b290abad37d
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>
Make it possible to have custom shell implementations

Different compositors may need different shell behaviors, or
even different shell protocols. A smartphone compositor, for
example, may want to make wl_shell_surface::set_popup or
other requests noop, because they don't make sense in the
formfactor, or it may even want to not implement wl_shell_surface
at all, but some smartphone_shell_surface.
A compositor may define its own shell implementation by overriding
QWaylandCompositor::initShell(), and creating there its interface
instance. The default implementation still creates the built-in
wl_shell_surface implementation.

Change-Id: I143b0cd4e30e31d4051ada6e562d486d9bf1a751
Reviewed-by: Gunnar Sletta <gunnar.sletta@jollamobile.com>