Add SkLightDeferredCanvas

The problem of SkDeferredCanvas is that recording time is too long. For
situations where we don't need seralize records for cross process boundary
case, we can save time by safe-ref of the objects in records.

This is exactly what SkLightDeferredCanvas does.  A SkLightDeferredCanvas
is a subclass of SkCanvas.  Inside the SkLightDeferredCanvas, it contains
a SkLightDeferredDevice.  The SkLightDeferredDevice uses a SkRecordQueue for
recording SkCanvas operations and playback.

Because SkRecordQueue is not a subclass of SkCanvas, we save time by
not adding canvas state changes during SkCanvas state change calls.  This
is both good and "bad".

The good is we save time.  The "bad" is we cannot check whether a canvas
draw covers a full frame that previous commands can be skipped.  In
SkLightDeferredCanvas, only clear() is able to skip pending commands.
The other that you cannnot call canvasForDrawIter() because if it is
deferredDrawing, we will return NULL.