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).
Thanks, that fixes it. Why is the `shared` needed? Could this just be written as `program.glir.flush(canvas)`, or is that somehow an ambiguous statement?