Fixed GCC formatting warning using syslog()
Fixed how the Makefile collects targets.

The Makefile was previously 'leaking' .cpp files into the CFILES
variable, causing some files to be compiled twice and leading to
duplicated symbols.

Now, CFILES (as well as its partner, OBJS) are built piecewise, avoiding
any duplication.
Make sure to start the log when SmallWM starts
Refactored out window registration.

This was necessary to avoid having to duplicate code between two places:

- When a MapNotify event causes a window to be mapped
- When SmallWM imports the existing windows and begins managing them
Fixed a bug which occurs when gettings WMHints.

WMHints, as returned by XGetWMHints, can be null. This check was
omitted previously, causing SmallWM to crash almost immediately.
Inserting this check prevents SmallWM from dying when it gets the hints
for a window which does not have them.
Removed unneeded 'echo' in Makefile.
Changed ClientModel::m_changes to use a queue.

Previously, SmallWM would crash when processing events, because it would
modify m_changes while iterating it. To allow ClientModel to add events
without worrying whether or not anybody is iterating over it, m_changes
is now a queue (this doesn't interfere with anything, since only one
element of m_changes is ever accessed at once).
Fixed ClientModelEvents::handle_queued_changes.

handle_queued_changes would previously take too many events, because it
called out to ClientModel::get_next_change three times per loop
iteration rather than just one.
Fixed issue with random crashes.

XEvents::step would randomly return True or False, because it didn't
explicitly return a value. Now, step always returns a value.
Fixed issues with moving/resizing windows.

- Previously, moving/resizing more than one window after SmallWM started
  would cause the move/resize action to continue even when the mouse was
  released. This was fixed by making the
  ClientModelEvents::handle_client_change_from_resizing_desktop and
  ClientModelEvents::handle_client_change_from_moving_desktop
  functions release the pointer grab.
- The placeholder window was not being positioned nor sized correctly -
  this was fixed in ClientModelEvents::create_placeholder by fixing the
  window passed to XData::move_window and XData::resize_window).
Fixed crash when accumulating icons.

Since querying the window to icon mapping creates a NULL pointer if the
client doesn't have an entry in that mapping, XModel::get_icons has to
ensure that it skips over any NULL pointers littering the icons list.
Removed XModel::exit_move_resize call from XEvents.

Parts of ClientModelEvents actually expect the data destroyed by
exit_move_resize to still exist, so XEvents::handle_buttonrelease cannot
destroy it.
Fixed how events are propagated under a pointer grab.

Previously, events on move/resize placeholder windows would report that
they were happening on the root window, even though the pointer was
confined to the placeholder. Flipping the 'owner_events' flag in
XData::confine_pointer ensures that events are reported relative to the
correct window.