Wrote the foundation of the new client data model.

The additions are types which are specific to the client data model.
The data model itself is in progress, but it hasn't been fleshed out
enough to warrant inclusion in this commit.
Added an equality comparison for changes.

This should make testing easier by allowing direct comparisons between
different Change objects.
Added sorting capabilities to Desktop classes.

This removes the need for singletons, and makes referencing Desktops
inside of std::map containers easier.
Added sorting capabilities to UniqueMultimap.

This makes it possible to sort clients by their layer, when their layer
is contained inside a UniqueMultimap.
Changed layer representation in the client model.

This brings the C++ branch more in line with some of the experiments
I've done in the Python branch.
Fixed the tests to accommodate the previous commit.
Preliminary commit of the client data manager.

Note that there are currently no tests for the client data manager.
Fixed other uses of the Desktop type.

Changes from recent commits broke old code that used the Desktop type.
Those fixes have now been made, and the configuration parsing tests now
pass.
Added a new basic tests for the ClientModel.

This tests was mostly useful for rooting out compilation issues in the
recently added code. Currently, that test compiles and passes.