Refactored out icon creation.

The function `ClientModelEvents::create_new_icon` was extended into the
function `ClientModelEvents::register_new_icon` which does what
`create_new_icon` did but also hides the client and registers the icon.
Added an icon desktop change handler.

`ClientModelEvents::handle_client_change_from_icon_desktop` deiconifies
clients.

Note that two changes were necessary in addition to writing that
function:

- The `Icon` destructor now deletes the graphics context that it uses.
  Although this seems a bit strange (because the graphics context is
  passed in via the constructor, and not actually created by the `Icon`
  itself), graphics contexts in X are limited to a single window. So,
  when the `Icon` (and thus its window) are destroyed, it makes sense
  that the graphics context bound to that window go away.
- `XEvents::handle_buttonpress` would previously unregister the icon
  itself, but now the change handler does that job.
Fixed the signature for `register_new_icon`
Apparently, `Icon` cannot delete its GC member.

This is because it introduces a dependency, where `Icon` has to know
to destroy an `XGC`. Since `Icon` is covered by the test suite
(being a POD type) and `XGC` is not (needing access to Xlib), the
`XModel` test fails to link since Xlib isn't linked into the tests.

This solution makes thing a bit uglier, but fixes the dependency and
allows the tests to build.