added canvas library

library to create render targets that have with the full set of
functions expected on gpu, plus a draw(target,x,y) method that can be
used to draw the contents of the canvas to another render target (either
a gpu or another canvas).  Rendering to these happens purely in memory,
making it very fast, and it compiles the longest possible strings it
can, called in code "spans," of consecutive characters sharing a color
before drawing up to the parent. This is not optimal for drawing to
other canvases, but is near-optimal for drawing to an actual gpu.

One possible optimization left: it may be worth the cycles, in the case
of the gpu, to use target.get for the entire area, trimming or skipping
spans that contain the same data as the screen. If this is added,
DEFINITELY must detect and handle canvas targets differently, as this
would be even more inefficient for drawing to another canvas, where the
get function is more expensive than the gpu's get function.