Automatic graph layout

This implements a first pass at an automatic graph layout algorithm. I don't expect it to be the final iteration by any means, but I think it's in a good place to be given a try in a few real world situations so I can respond to feedback. The development process for this has been quite winding and experimental, so I've compressed the bulk of the work down into a single commit, but in case you think seeing the whole dirty process will aid with review, it can still be seen at https://github.com/johnhaddon/gaffer/tree/constrainedLayout.

I've marked this as fixing #638, on the expectation that I can address some more as part of #155 and that we'll open specific tickets for issues as they come up.

The algorithm used has a couple of parameters whose defaults I've chosen to work reasonably in standalone Gaffer - I'll mail Paulo directly to describe how they can be tweaked a little to work better for Jabuka.