Scenegraph benchmark

WIP: This PR adds a benchmark example for comparing scenegraph performance to similar optimal implementations. 

The intent is to add more benchmark examples and optimizations until we get comparable performance (or decide that we will never get comparable performance).
In general you could do `canvas.context.flush_commands()`, but since the program is not drawn, there is no association with the canvas. So in this case you need to explicitly flush it into the available parser.