Introduce Property Trees

Based of Andrew's work: crrev.com/642833002

This patch creates a transform and a clip tree and computes
visual content rects based on those.

BUG=386786

Review URL: https://codereview.chromium.org/687873004

Cr-Commit-Position: refs/heads/master@{#308724}
diff --git a/ui/gfx/transform.h b/ui/gfx/transform.h
index eeb66206..85bab694 100644
--- a/ui/gfx/transform.h
+++ b/ui/gfx/transform.h
@@ -122,6 +122,11 @@
   // Returns true if the matrix is either identity or pure translation.
   bool IsIdentityOrTranslation() const { return matrix_.isTranslate(); }
 
+  // Returns true if the matrix is either the identity or a 2d translation.
+  bool IsIdentityOr2DTranslation() const {
+    return matrix_.isTranslate() && matrix_.get(2, 3) == 0;
+  }
+
   // Returns true if the matrix is either identity or pure translation,
   // allowing for an amount of inaccuracy as specified by the parameter.
   bool IsApproximatelyIdentityOrTranslation(SkMScalar tolerance) const;