serious SkEdgeBuilder refactoring

This splits the three logical types of SkEdgeBuilders
into distinct C++ types, with some shared logic.

Looks like this cuts another 10K off Flutter,
including that 8K table.

Change-Id: I0c901de8b0bb70b9a9dce07683110177a287b0ee
Reviewed-on: https://skia-review.googlesource.com/c/164626
Commit-Queue: Mike Reed <reed@google.com>
Auto-Submit: Mike Klein <mtklein@google.com>
Reviewed-by: Mike Reed <reed@google.com>
diff --git a/src/core/SkScan_DAAPath.cpp b/src/core/SkScan_DAAPath.cpp
index b3bbd97..53da58a 100644
--- a/src/core/SkScan_DAAPath.cpp
+++ b/src/core/SkScan_DAAPath.cpp
@@ -160,10 +160,10 @@
 void gen_alpha_deltas(const SkPath& path, const SkIRect& clippedIR, const SkIRect& clipBounds,
         Deltas& result, SkBlitter* blitter, bool skipRect, bool pathContainedInClip) {
     // 1. Build edges
-    SkEdgeBuilder builder(SkEdgeBuilder::kBezier, 0);
+    SkBezierEdgeBuilder builder;
     // We have to use clipBounds instead of clippedIR to build edges because of "canCullToTheRight":
     // if the builder finds a right edge past the right clip, it won't build that right edge.
-    int  count = builder.buildEdges(path, &clipBounds, pathContainedInClip);
+    int  count = builder.buildEdges(path, pathContainedInClip ? nullptr : &clipBounds);
 
     if (count == 0) {
         return;