Now, path ops natively intersect conics, quads, and cubics in any combination. There are still a class of cubic tests that fail and a handful of undiagnosed failures from skps and fuzz tests, but things are much better overall.

Extended tests (150M+) run to completion in release in about 6 minutes; the standard test suite exceeds 100K and finishes in a few seconds on desktops.

TBR=reed
BUG=skia:3588

Review URL: https://codereview.chromium.org/1037953004
diff --git a/src/pathops/SkPathOpsSimplify.cpp b/src/pathops/SkPathOpsSimplify.cpp
index 5c8a7fd..8d525fa 100644
--- a/src/pathops/SkPathOpsSimplify.cpp
+++ b/src/pathops/SkPathOpsSimplify.cpp
@@ -191,7 +191,7 @@
     // turn path into list of segments
     SkOpCoincidence coincidence;
     SkOpContour contour;
-    SkOpGlobalState globalState(&coincidence  PATH_OPS_DEBUG_PARAMS(&contour));
+    SkOpGlobalState globalState(&coincidence  SkDEBUGPARAMS(&contour));
 #if DEBUG_SORT || DEBUG_SWAP_TOP
     SkPathOpsDebug::gSortCount = SkPathOpsDebug::gSortCountDefault;
 #endif
@@ -202,16 +202,18 @@
 #if !FORCE_RELEASE
     contour.dumpSegments((SkPathOp) -1);
 #endif
-    result->reset();
-    result->setFillType(fillType);
     SkTDArray<SkOpContour* > contourList;
     MakeContourList(&contour, contourList, false, false);
     SkOpContour** currentPtr = contourList.begin();
     if (!currentPtr) {
+        result->reset();
+        result->setFillType(fillType);
         return true;
     }
     if ((*currentPtr)->count() == 0) {
         SkASSERT((*currentPtr)->next() == NULL);
+        result->reset();
+        result->setFillType(fillType);
         return true;
     }
     SkOpContour** listEnd2 = contourList.end();
@@ -231,6 +233,8 @@
         return false;
     }
     // construct closed contours
+    result->reset();
+    result->setFillType(fillType);
     SkPathWriter wrapper(*result);
     if (builder.xorMask() == kWinding_PathOpsMask ? bridgeWinding(contourList, &wrapper, &allocator)
                 : !bridgeXor(contourList, &wrapper, &allocator))