Added some tests related to desktops.

- `test_client_desktop_change` changes the desktop of a client, and
  ensures that it wraps around, and that the focus is changed properly.
- `test_bad_client_desktop_change` tries to change the desktop of a
  client in a series of situations where this is not possible, and then
  ensures that nothing changes.
- `test_desktop_change` is analogous to `test_client_desktop_change`.
- `test_stick_does_not_lose_focus` ensures that the focus is preserved
  when a client is stuck, and the desktop is changed in different ways.
Fixed a misspelling.

`is_curent_desktop_change` didn't override the virtual method because it
was spelled incorrectly.
Added visibility handling to desktop routines.

This makes it possible to retain the focus when it is possible, and only
drop the focus when the currently focused window is not visible.
Added a couple of tests.

- `test_bad_desktop_change` ensures that the model will refuse to change
  desktop under certain circumstances.
- `test_stick_does_not_lose_focus` was fixed. I wrote it incorrectly the
  first time, as it was testing for a particular circumstances that the
  model does not have the capacity to express. (It was working with the
  assumption that there is an "actual" desktop on which a client is
  stored when it is actually on DESKTOP_ALL. The model can only express
  "DESKTOP_ALL" or "particular desktop", not both as the test had
  assumed).
- `test_iconify` and `test_bad_iconify` test the iconification feature
  under different circumstances - `test_iconify` ensures that the
  correct events are emitted, and `test_bad_iconify` ensures that a
  window will not be iconified under certain circumstances.
Made some fixes so that the new tests pass.