0. Goals/Philosophy.

The basic philosophy behind this library's design is simple: the X server is
a shared resource that multiplexes poorly. Therefore, the server is touched
as late as possible, and X memory is conserved (as is for some things main
memory). This makes the worst case much better, but likely makes the best
case worse.

1. Planes.

In displaying images, data has to be moved between client and the server,
and perhaps scaled. The concept underlying this is that of a plane.
The original images data is at the original/source plane, and all the other
planes get the data from it or some other plane. Various scenarios are handled
by stacking planes in a different order.

e.g., here is how a basic displaying looks:

RawPixmapPlane
     ^
     |
RawImagePlane <- - - (data from loader)


and a client-side scaling scenario:

RawPixmapPlane
     ^
     |
ScaledImagePlane
     ^
     |
RawImagePlane <- - - (data from loader)


All planes above the lowest RawImagePlane treat their data as tiles,
and limit the actual resources they use by using the appropriate tile cache
to allocate them.

