Make it possible to custom-paint without an Element.
Make it possible to custom-paint without an Element.

This adds a new abstract 'Canvas' which is similar to SkCanvas.
PaintContext implements Canvas while still having its
own commit() method to cause the paint actions to apply to
the Element for the next frame.
This adds a new PictureRecorder which also implements Canvas
and has an endRecording() method which returns a Picture
(another new interface) which can be held from Dart.

There is also now a rootPicture setter on Document which takes
a Picture and will then make the Document draw that Picture
until changed.

This piggybacks on the existing custom painting system
which adds the painting at background-and-borders paint
time so technically if you both set rootPicture as well as
construct a DOM you will draw the DOM on top of your picture. :)

R=mpcomplete@chromium.org

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

aghassemi/flutter,cbracken/flutter,Hixie/flutter,tvolkert/flutter,cbracken/flutter,cbracken/flutter,cbracken/flutter,tvolkert/flutter,aghassemi/flutter,tvolkert/flutter,tvolkert/flutter,flutter/flutter,flutter/flutter,turnidge/flutter,cbracken/flutter,cbracken/flutter,jason-simmons/flutter,Hixie/flutter,turnidge/flutter,flutter/flutter,flutter/flutter,flutter/flutter,Hixie/flutter,cbracken/flutter,tvolkert/flutter,Hixie/flutter,aghassemi/flutter,jason-simmons/flutter,flutter/flutter,turnidge/flutter,flutter/flutter,cbracken/flutter,jason-simmons/flutter,cbracken/flutter,flutter/flutter,Hixie/flutter,Hixie/flutter,Hixie/flutter,tvolkert/flutter,tvolkert/flutter,turnidge/flutter,tvolkert/flutter,aghassemi/flutter,cbracken/flutter,Hixie/flutter,Hixie/flutter,turnidge/flutter,Hixie/flutter,tvolkert/flutter,tvolkert/flutter,flutter/flutter,jason-simmons/flutter,flutter/flutter