Added a way to grab mouse buttons.

This is useful for focus tracking, since SmallWM uses click-to-focus, it
needs to intercept clicks on unfocused windows. This change also
required me to fix `XData::confine_pointer`, which was using
`XGrabButton` instead of `XGrabPointer` as it should have used.
Fixed a minor naming error
Implemented click-to-focus in `ClientModelEvents`
Desktop-related changes record the previous desktop.

This will be useful to implement the change handlers for Desktop-related
changes, since they have no access to old data about the desktop.

There are also modifications to the existing tests which account for
this change.
Added a change handler for current desktop changes.

This change handler processes current desktop changes, and reacts by
mapping/unmapping the appropriate windows and relayering.
Fixed a crash which was detected by the tests.

This resulted from a NULL pointer dereference, which is now more
thoroughly checked.