Change GrTextContext fallbacks to be a linked list chain.

Preliminary work for getting color emoji working with
distance field text.

BUG=skia:2887

Review URL: https://codereview.chromium.org/650273003
diff --git a/src/gpu/GrBitmapTextContext.h b/src/gpu/GrBitmapTextContext.h
index a9805cb..7a93820 100644
--- a/src/gpu/GrBitmapTextContext.h
+++ b/src/gpu/GrBitmapTextContext.h
@@ -18,18 +18,10 @@
  */
 class GrBitmapTextContext : public GrTextContext {
 public:
-    GrBitmapTextContext(GrContext*, const SkDeviceProperties&);
+    static GrBitmapTextContext* Create(GrContext*, const SkDeviceProperties&);
+
     virtual ~GrBitmapTextContext();
 
-    virtual bool canDraw(const SkPaint& paint) SK_OVERRIDE;
-
-    virtual void drawText(const GrPaint&, const SkPaint&, const char text[], size_t byteLength,
-                          SkScalar x, SkScalar y) SK_OVERRIDE;
-    virtual void drawPosText(const GrPaint&, const SkPaint&,
-                             const char text[], size_t byteLength,
-                             const SkScalar pos[], int scalarsPerPosition,
-                             const SkPoint& offset) SK_OVERRIDE;
-
 private:
     enum {
         kMinRequestedGlyphs      = 1,
@@ -49,6 +41,17 @@
     // Used to check whether fCachedEffect is still valid.
     uint32_t                          fEffectTextureUniqueID;
 
+    GrBitmapTextContext(GrContext*, const SkDeviceProperties&);
+
+    virtual bool canDraw(const SkPaint& paint) SK_OVERRIDE;
+
+    virtual void onDrawText(const GrPaint&, const SkPaint&, const char text[], size_t byteLength,
+                            SkScalar x, SkScalar y) SK_OVERRIDE;
+    virtual void onDrawPosText(const GrPaint&, const SkPaint&,
+                               const char text[], size_t byteLength,
+                               const SkScalar pos[], int scalarsPerPosition,
+                               const SkPoint& offset) SK_OVERRIDE;
+
     void init(const GrPaint&, const SkPaint&);
     void appendGlyph(GrGlyph::PackedID, SkFixed left, SkFixed top, GrFontScaler*);
     void flush();                 // automatically called by destructor