[SVGDom] Add viewBox support

The main feature is <svg> viewBox and proper viewport support, but the CL
touches a few other things:

* refactor SkSVGRenderContext to auto-restore canvas state, and split the
  presentation bits into a separate CoW SkSVGPresentationContext

* introduce SkSVGNode::onPrepareToRender(), as a way for nodes to push their
  custom state before the actual onRender() call (instead of relying on
  non-virtual SkSVGNode to know about all possible state bits)

* add a "Type" suffix to SVG types, to disambiguate (e.g. SkSVGRectType vs.
  SkSVGRect)

R=robertphillips@google.com,stephana@google.com
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2222793002

Review-Url: https://codereview.chromium.org/2222793002
diff --git a/experimental/svg/model/SkSVGTransformableNode.h b/experimental/svg/model/SkSVGTransformableNode.h
index c345e85..475fafb 100644
--- a/experimental/svg/model/SkSVGTransformableNode.h
+++ b/experimental/svg/model/SkSVGTransformableNode.h
@@ -20,9 +20,9 @@
 protected:
     SkSVGTransformableNode(SkSVGTag);
 
-    void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override;
+    bool onPrepareToRender(SkSVGRenderContext*) const override;
 
-    const SkMatrix& onLocalMatrix() const override { return fMatrix; }
+    void onSetAttribute(SkSVGAttribute, const SkSVGValue&) override;
 
 private:
     // FIXME: should be sparse