NOT-UPSTREAMABLE: make deep copy of SkPath
Parallelize SkLightDeferredCanvas:

parallelize SkLightDeferredCanvas.  With parallelization, there is a back
ground playback thread that takes the commands from SkRecordQueue and
executes that.  This means

1. SkipPendingCommands() is ignored.  Parallel always playback without
   skipping
2. when SkLightDeferredCanvas.enableThreadedPlayback(true), the background
   is automatically created.
3. when SkLightDeferredCanvas.enableThreadedPlayback(false), the
   background thread finishes all pending commands and wait for threads
4. Skia is not designed for multithreaded rendering.  This means when
   in parallel mode, you can only call SkLigDeferredCanvas interfaces
5. Do not call deferred device or SkSurface used to create the deferred
   canvas.  This will like results in memory corruption
6. You must supply SkLightDeferredCanvas::NotificationClient, at least
   implement prepareForDraw() and finishDraw().  If it is GPU rendering,
   prepareForDraw() should provide gl context switch in, while
   finishDraw() should provide gl context switch to None
7. For chromium browser, you don't need to implement finishDraw()
correct GR_GL_MAX_SAMPLES_EXT
force calling moveTo() if there is no previous path
check matrix does not have rotation or perspective transformation

When checking whether we need apply AA to a rect for non-msaa target,
simply check the mapped rect is integer is not enough.  We need to
check whether the transformation matrix has transformation other than
simple translation
Reduce copy and pasted code and attempt to optimize playback thread

Remove copy
shrink critical section
pre-allocate storage for queue
don't memset record to 0 since we don't need to

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>