screen: Fix workspace removal

I accidentally broke this in commit a119ea9. The code was considerably
more complicated than it needs to be, so let's replace it with a
g_list_find and nothing more.
workspace: Replace a boolean ^ with !=

This is a lot easier to understand.
workspace: Make the code for removing windows easier to read

Repeatedly pop off the head of the list rather than iterating through
it.
workspace: Use for loops instead of whiles to iterate through lists
workspace: Use g_object_class_install_properties
workspace: Use G_PARAM_STATIC_STRINGS
workspace: Add a "workspace-index" property to MetaWorkspace

This will be used to replace some of the hooks that are used to call
into window.c, so that the workspace index property is properly kept up
to date.

We can't name the property "index" since it causes conflicts with the
meta_workspace_index method. This should really be called
meta_workspace_get_index, but oh well.
workspace: Rewrite workspace management code

The existing workspace management code is quite hairy, with plenty of
logic inline in all of window.c, workspace.c, and screen.c, making it
hard to understand or make changes to, since you might forget to change
several of the other places the code was around.

Rewrite the internal workspace management logic so that it's
centralized and all in window.c. Document the invariants we need to
maintain, and ensure that these invariants are properly kept, with
asserts in various places.

Extensive testing on gnome-shell did not bring up any issues, and this
is a considerable cleanup.