shell: handle multiple popups

This patch implements a popup stack. When the first popup is opened
the grab is started, and it is added to a list. Further popups will
be added to this list but the grab won't change. When a popup is
closed it is removed from the list and, if it is now empty, the grab
is ended.
A click outside the client area will send the popup_done event to
all the popups in the list, and the grab will end.
diff --git a/src/compositor.c b/src/compositor.c
index b734f67..3e24295 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -2705,6 +2705,8 @@
 		      &seat->new_drag_icon_listener);
 
 	clipboard_create(seat);
+
+	wl_signal_init(&seat->destroy_signal);
 	wl_signal_emit(&ec->seat_created_signal, seat);
 }
 
@@ -2722,6 +2724,7 @@
 	xkb_info_destroy(&seat->xkb_info);
 
 	wl_seat_release(&seat->seat);
+	wl_signal_emit(&seat->destroy_signal, seat);
 }
 
 static void