shell: Fix crash when a surface is destroyed during a grab

If a client crashes, the shell_surface(s) will be destroyed. If
a grab was present, we now destroy the grab when destroying the
surface.
toytoolkit: Fix crash when a surface is destroyed during a grab

The desktop shell client might crash if a the focus_surface pointer
is set to NULL while a grab is being held. Because this pointer variable
is not always valid, here we always check that it is not NULL before
using it.