Reduced occurences of accidental connection snatching.

GraphGadget::updateDragReconnectCandidate will early out if there are no free output plugs, or if a free output plug defines a corresonding input which is not free. Fixes #325 and Fixes #313. Fixes #283 enough that I think we should close it, lest it be open for all eternity.
Refactored previous commit so the checks happen after selecting a reconnection candidate.
Merge pull request #344 from andrewkaufman/noodleSnatchingImprovements

Reduced occurences of accidental connection snatching.
Simplified OpenGL shader menu building.

This brings it inline with the RenderMan shader menu, and avoids lots of unecessary stat()s which can be slow. The old code also got mighty confused by symlinks in GAFFER_ROOT.
Fixed NodeMenu to be per-app.

This allows two apps to run in the same process without fighting over the contents of the node menu. The menu for an app is now obtained using NodeMenu.acquire( application ) rather than being defined by global functions.

Also refactored renderman and arnold menu building out of their modules and into startup/gui/menus.py to match the menu building for the scene and image modules. Renamed GafferRenderManUI.Menus to GafferRenderManUI.ShaderMenu to reflect its more limited use, and to match the API provided by GafferArnold.

Note that these changes break compatibility. Specifically at IE we need to :

- Update the menu building for Jabuka and Grapher.
- Update the central config files.
fixed coshader hash propagation bug, added unit test
fixed coshader hash propagation bug, added unit test
Merge pull request #359 from johnhaddon/perAppNodeMenu

Per app node menu