Added a 'fallback' for event handlers.

This allows events which don't have a valid `subwindow` member to still
happen. This is most important for the force-close method, which needs to
be able to work on any possible window.
Fixed a bug with gnome-terminal.

gnome-terminal was causing a problem with the m_clients map, where the
state of a client would get set to 0 (instead of deleted) when the client
was destroyed. This has been fixed with a small workaround.
Did a bit of refactoring:

 - The Doxyfile was modified to output call graphs
 - The ClientManager has had some of its internals moved to different
   classes, to aid in refactoring.
 - The LayerManager class now handles how clients are layered.
 - The ClientCollection class now handles client states.
More refactoring:

 - Moved desktop management into its own class, DesktopManager
 - Made some public things that should have been protected, protected
 - Added some 'leaks' in the ClientContainer to allow special calls back
   to the ClientManager from the DesktopManager / LayerManager
Made SmallWM respect the WM_STATE property - it is now set on all clients.
Minor stylistic fixes:

 - Removed ClientManager::map and ClientManager::unmap
 - Rewrote some confusing comments
SmallWM now respects the initial_state property of WM_HINTS.

This necessitated the addition of a new client state, CS_WITHDRAWN, and
some fiddling around with ClientManager::create.

Also, DesktopManager::should_be_visible was added to help
ClientManager::create do its job.
Refactored out icon handling into a separate IconManager.
Fixed a bug where SmallWM would enter a loop when relayering a client.

The fix was essentially 'pepper flush_configurenotify calls anywhere they
might be created.' Imprecise, but it doesn't appear to slow anything down
and the problem is fixed.
This reverts commit 7b567 and 5ef4a.

As it turns out, this change creates a situation where there is a 'loop'
of sorts when a client is layered above another. As a result, when I
have more time, I'll work out this particular bug. Until then, I
have reverted to the pre-IconManager setup.
Added a finer grained layering mechanism.

This doesn't change how the user sets layers manually, but allows focused
window to appear above other windows on the same layer. This allows newly
created windows to be put above their siblings, which is saner than
having to hunt them down.
Added a note about layers to the README.
Created a 'focus chain.'

This makes focusing a little more useful, since when a window is destroyed,
the previously focused window is focused, and so on. For example, when
a dialog window is closed, the window that spawned the dialog is focused.

This helps avoid 'disappearing window syndrome' when a window which was
focused recently is put below a window which was focused less recently.
Try to avoid duplicates being entered into the focus history.

(Although this hasn't happened yet - or, I think it hasn't - I want to
avoid any possible problems with this happening in the future).
Added relayering operations after done moving/resizing.
Wrote a small shim on top of syslog.

This will allow me to trace issues as I continue refactoring the event
mechanism.
Made SysLog::set_priority return the logger.

This allows SysLog::set_priority to be called inline, instead
of before logging.
typedef'd a bunch of iterators.

There are now five new types:

 - ClientManager::ClientIconIterator
 - ClientManager::WindowIterator
 - ClientContainer::iterator (for iterating over the client state map)
 - LayerManager::iterator (for iterating over the layer map)
 - DesktopManager::iterator (for iterating over the desktop map)
Added the Doxygen /** @file */ header to files that were missing them.
Refactored how key bindings work.

Previously, key bindings were rolled out - now, they are indexed by tables.