Emit surfaceDestroyed() when the surface pointer is still around

Previously we were emitting the signal when the pointer was already
gone since QWaylandSurfaceItem already catches it we connect it its
surfaceDestroyed() signal instead of QWaylandSurface's.
Use C++11 to connect to mapped and unmapped signals

With C++11 we can connect to surface mapped and unmapped signals
and do what we need to do in a lambda function.

This was a few lines of code for the slots are avoided and the
code is more readable.
Remove surface from the model after it is destroyed

Otherwise the window is undefined.