Tweaked definition of keysym_to_string.
Trivial debugging message tweak.
Added type assertion in FontInfo.char_info.
Fixed spurious warning.

Commit 1af63f8d3224c91c8136b901dcd27f7fe585b9ef accidentally left
a debugging message at warning level.
Fixed potential crash bug in RandR event handling.
Revamped multi-head support.

We now have a dedicated module for multi-head, with support for both
RandR and Xinerama.
Added __add__, __contains__ methods to PropertyValueList.
Export PropertyValue class from properties module.
Added WindowList property value class.
Made PropertyManager usable as a mixin.

This simplifies the use of window properties, and will make the
forthcoming EWMH support much cleaner and more direct.
Initial steps towards EWMH support.

We support only three hints with this patch: _NET_SUPPORTED,
_NET_SUPPORTING_WM_CHECK, and _NET_CLIENT_LIST.
Added support for user code in "~/.dim.py".
Allow customization of client class based on arbitrary selectors.

Such selectors might occur in ~/.dim.py; e.g.:

class SpecialClient(Client):
    ...

@client_selector
def special(client):
    if tuple(client.wm_class)[1] == "Special":
        return SpecialClient
Use a Client method to establish key and button grabs.

This allows subclasses (e.g., as might appear in ~/.dim.py) to override
the entire grabbing process:

class IgnoreBindingsClient(Client):
    def establish_grabs(self, *args, **kwargs):
        pass
Fixed attribute initialization in PropertyManager.__init__.
Allow customization of decorator class based on selectors.

Decorator selectors are analogous to client selectors, but the
decorators are not instantiated first, like client instances are.
The ability to select the decorator class required tweaking the
Client initialization protocol, whence the introduction of the
new Client.frame method.
Tweaked WindowManager.make_client.
Removed obsolete logging code from tag test suite.
Support quote and list instructions in tag machine.
Fixed nested tag machine lists.