Wrote the tests for managing stickiness, which now pass.
Reimplemented how desktops and layers are stored.

This removes some boilerplate code for managing the dictionaries
from the `ClientData` class, and uses direct dict lookups for
most operations instead of searching for things (for example,
`ClientData.find_desktop` is now a direct table lookup instead
of a search through all the desktops).