The first stage of the C++ port.

 - I've moved all the original C files into the c/
   directory, for reference.
 - The src/, test/ and inih/ directories are all
   separate locations for different kinds of code.
 - I've setup Doxygen to create some basic
   documentation.
 - I've written the configuration parser and a
   simple test for it.
Documented the source files and header files for better use with Doxygen.

Doxygen will generate documentation for things that it ignored previously,
such as src/utils.cpp.
Fixed some commenting irregularities.

I added periods to the end of every section of every Doxygen comment.
Made WMConfig::get_config_path() const.
Wrote a header describing what the window manager shares.
Fixed a couple issues with the Makefile.

Specifically, not all the targets required that the `obj` directory exist.
Added some constants to the common header to avoid too much magic.
Removed the current_desktop parameter from the shared data pool.

This will actually be managed by a different entity.
Wrote the Client and ClientManager code.

This code also is the basis for a lot of additional utility classes:
 - LayerManager
 - DesktopManager
 - MoveResizeManager
 - FocusManager
Fixed a minor API bug, and fixed a potential focusing error.

The API needs to be able to handle the user switching to an adjacent
desktop, but the previous version only supported setting the desktop
without getting the current one. That has been fixed.
Added a flag in the client to indicate whether its window is active.

This prevents the client from doing operations on a window that might
not be mapped onto the display.
Wrote some convenience macros for reading a Dimension2D.
Added an IconManager so clients can be hidden and unhidden.
Removed the need to use a shared pointer.

Since the ClientManager ultimately has all authority over client memory
(de)allocation, it doesn't make sense to add the complexity of the shared
pointer when a pointer would do.
Added the ability to customize key combinations
Added some tests for the new key combinations configuration.

These tests succeed.
Remove unnecessary use of ClientManager.

Some sub-managers automatically got access to the
owning ClientManager when they didn't need it. I've
removed the parameter in the constructor for the
classes in which it was unnecessary.
Added some constants related to mouse buttons.
Added the shell to the list of shared variables.
Removed the client code.

I finished everything, but I disliked the outcome - it was too ugly, and
had many bugs in the way that clients shifted between states. So, I'm
redoing how clients are managed in the hope of producing a better design.