shell: Virtual workspaces

A workspace is a list of top level surfaces visible at a time. New
toplevel surfaces are added to the current workspace. Default
keybindings (modifier - Up, modifier - Down, modifier - F1 up to F6) are
used for navigating between workspaces. By default a single workspace is
created.

Surfaces of inactive workspaces have their outputs NULL:ed so that frame
callbacks gets queued instead of emitted. When workspace gets visible
again surface's outputs are assigned.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
diff --git a/src/compositor.c b/src/compositor.c
index de8c605..51347dc 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -1125,7 +1125,8 @@
 weston_layer_init(struct weston_layer *layer, struct wl_list *below)
 {
 	wl_list_init(&layer->surface_list);
-	wl_list_insert(below, &layer->link);
+	if (below != NULL)
+		wl_list_insert(below, &layer->link);
 }
 
 WL_EXPORT void