server: Rework how XID object assignment is done

Right now, all XID assignment is done by the _createWindowInternal or
_createPixmapInternal functions. Which, while great for our internal
server implementations, doesn't work too well for redirected draw trees
where we have dynamically reconfigured pixmaps that we have to give
XIDs to.

Make it a bit easier to just say "new ServerPixmap" and DTRT.
server: Make ServerPixmap a quick wrapper around a real Pixmap

For NameWindowPixmap and other parts of COMPOSITE, we have to be able to
the backing store of an internal Pixmap on the wire, so we can't have
ServerPixmap be creating a new Pixmap at runtime. Make the ServerPixmap
wrapper a bit more adaptive for what it's doing.
server: Add a destroy() method to ServerWindowDrawTree

To allow deallocating the giant Pixmap we created for that window. This
will be helpful when we implement redirection / unredirection.
server: Make pixmaps ref-counted

This allows the ServerPixmap for a backing storage for a
ServerWindowDrawTree to be created and destroyed without wrecking the
actual backing storage.

To make ref-counting easier to use from JS, the refcount starts
at *0*. Thus, proper usage of the internal Pixmap is to add an initial
refcount, like with: (new Pixmap()).ref().
server: Fix a quick think-o in subtractWindow

We need to check the window we're subtracting's drawTree, not the
toplevel window.
server: Start fizzling out changes to the drawTree

This doesn't matter much now -- but we'll soon need to propagate draw
tree changes to children, so do the work now.
server: Sync the draw tree on children when it changes
server: Add new properties for the "draw tree position"

The old drawing code was implicitly assuming that any draw tree root
would also physically be at 0,0 in the window tree.

Thus, when we went to calculate the bounding region or the window's draw
offset, the draw tree root's position would be added. This worked in the
general case because up until now, the root would be at 0,0, and adding
in 0,0 wouldn't change anything.

To fix this, add new properties for drawTreeX and drawTreeY, which are
the same as normal X/Y if the window is a normal child. However, if the
child is a draw tree root, then these properties give 0,0. Thus, this
gives the correct offset into the pixmap.

At the same time, fix up all the drawing and region calculating code to
correctly use these new properties.
server: Add COMPOSITE / redirection functionality
server: Add mapState to getAttributes

This will allow the CM to only add viewable windows.
server: Add Damage events for windows

When they're drawn to. This is really dumb, because it doesn't include
any of the bounds for what pixels were touched, but <canvas> doesn't
really give us that information, so we can't say too much.
window-tree: Don't ignore NonlinearVirtual events

This type of event could happen when dragging the window under the
inspector button and then mousing into the parent window from there.

Just ignore all Virtual events -- where we zip past the parent directly
into a child.
WIP: Composited demo