Made Plug flags serialisation more future proof.

Our previous method meant that we couldn't introduce new default flags in the future, because they would default to off when loading old files. This new approach always serialises by adding and removing from Plug::Flags::Default to avoid this problem.

Pleasingly, this also reduces the file size of a large graph with many shaders by over 20%, and reduces the loading time by almost 10%.

Fixes #684.
Removed redundant serialisation of default values.

This reduced file sizes by 25% and load times by nearly 20% for a large production script.

Note that changing the default value for a plug or shader parameter now represents a backwards compatibility break with old scripts.
Fixed serialisation of Constant node with zero alpha.

Rather than correctly set the default value for the color plug in the constructor, the Constant node was constructing with a default of 0, and then in the constructor calling setValue( 1 ). This breaks completely with the default-value-omission optimisation, because when the user sets the value back to the true default, the value isn't saved out, and then on reloading the constructor clobbers the true default.
Made CompoundDataPlug::addMember() set plug default values.

This is necessary to avoid the same serialisation-of-default-values problem as was addressed in the Constant node in the previous commit. It also improves things from a user perspective - setting a value in an Attributes or Options node back to default now reverts it to the value it had on construction rather than always setting it to 0 or "".
Merge pull request #754 from johnhaddon/ioImprovements

I/O improvements
prefixes arnold shader search names with 'ai'
Exposed "enabled" plugs in a new Node Editor "Node" tab.

Fixes #759.
Merge pull request #764 from johnhaddon/exposeEnabledPlug

Exposed "enabled" plugs in a new Node Editor "Node" tab.
Update ShaderMenu.py

bringing the spacing in line with other types (as per john's notes)
Removed MessageWidget.textWidget() method.

The internal text widget should now be considered private. The currently displayed messages may be cleared using the new MessageWidget.clear() method.
Fixed MessageWidget crashes encountered in Maya.

After much stumbling around in the dark, I've thrown in the towel on trying to get block level visibility edits working, and resorted to a simpler approach where messages are stored independently of the text widget.
Removed deprecated MessageWidget.appendException() method.

It has been deprecated for a few versions now and is no longer used within Gaffer. The appendMessage() method is still used by NotificationMessageHandler so remains for now.
Add control over the default button to the OpDialogue.

This controls whether the OK or Cancel button is focussed by default when displaying the Op. The default value is as before, focussing the OK button, but the value can be controlled either by user data in the Op or by passing an alternative argument to the OpDialogue constructor.
Merge pull request #756 from bentoogood/arnoldShaderMenu

Added search prefix to arnold shader names
Merge pull request #767 from johnhaddon/messageWidget

MessageWidget fixes
Merge pull request #768 from johnhaddon/opDialogueFocus

Added control over the default button to the OpDialogue.
Fixed bug preventing positioning of nodes within Backdrops.

The collision group mechanism may seem a little more general than is needed for this particular fix, but I believe it has uses down the line, in particular for laying out individual islands of nodes separately before aligning them as required by #155.

Fixes #769.
Removed unreasonable todo item from ComputeNodeTest.

This dates back to a time before contexts were introduced and there was effectively a single global context. Back then each plug actually had a dirty flag, representing whether or not it had been computed for that context yet. That is no longer the case, and the idea of a flag defeats the object of multiple contexts and theaded evaluation.
Removed unused (and unimplemented) Gadget constructor.
Adopted new Python wrapping mechanism from Cortex.

This allows us to avoid a great deal of overhead when wrapped classes are created from Python but not subclassed.