We will always run exit and cleanup  unless run() completely blows up.

cleanup() should then exit with a code but if it doesn't, that is an error
case so indicate failure.
Turn cleanup into an atexit() handler
Exit in fewer places
Use abort() instead of pretending.
helpers
helpers
helpers
more todo
author
z3bra patch resolving offsets issues
clickable problem solved
choosable cursor position, from a nice conversation on irc.nixers.net
java GUI problem with xcb wm
proper handling of _NET_SUPPORTING_WM_CHECK

 - EWMH/NetWM requires setting _NET_SUPPORTING_WM_CHECK on the root
   to a check window owned by the window manager

 - _NET_SUPPORTING_WM_CHECK and _NET_WM_NAME must be set also on
   the check window
use xcb_window_t, add _NET_WM_PID too

 - _NET_WM_PID is not required by the standard but is often set
   by window managers anyway

 - the check window has no events like bspwm because the window
   is not reused by 2bwm for other things

 - bspwm only makes it the size of the desktop because it is also
   using it to capture motion events

 - bwpwm gets the order wrong, it is important to set up the
   properties on the check window _before_ setting the
   _NET_SUPPORTING_WM_CHECK on root.  Toolkits looking for the
   check window can fail if the root property is set before the
   window property.
Merge pull request #13 from bbidulock/master

use xcb_window_t  and add _NET_WM_PID too
little adjustment
send to next/previous workspace
fake click using xdotool, and idea of Lukas Epple,might encode it in the wm later
Simplifies main() so that it is responsive to signals.

With the prior implementation cleanup would never run on SIGINT or
SIGTERM.