Add BaseCanvas and BoolCanvas

BaseCanvas now provides buffered drawing to canvas-based controls.
BoolCanvas subclasses BaseCanvas and provides a Value property and
ValueChanged event to boolean-oriented controls