I've created a branch for the new graph processing code so we can test it a bit before I push it to master. It is immensely faster than the old code (my simple 15 node benchmark graph went from 10% overhead to about 0.5% overhead), but it has probably broken some assumptions about the old graph.
The known gotchas:
* get_cached_region is no longer used. The cache bounds are
  always the full output bounds, but the request will not be
  expanded.
* The cache intersect is calculated after all requests to a node
  are combined, so partial cache hits from multiple nodes may
  skip the cache.
* Meta nodes (nodes who's pads do not reference them) will never
  be visited.
* Prepare is called only once per node (at least until the node is invalidated), and must not modify the
  connectivity of the graph.
I've fixed the issues I found in the included operations (load, save, and layer were the only ones broken) and Gimp appears to work, but I'm sure there are some new bugs lurking around after changing this much code. :)
https://git.gnome.org/browse/gegl/log/?h=newgraph-merge