Updated changes
Added Widget.reveal() method.

This ensures that all the widget's ancestors do whatever is necessary to make the widget actually visible directly to the user.

Fixes #503.
Improved plug "Edit Input..." menu item.

It now uses the new Widget.reveal() method to ensure that the input plug widget is directly visible on screen.
Added extend argument to NodeGraph.frame().

The default value of false behaves exactly as before - the specified set of nodes are framed in the viewport. A value of true still causes the nodes to be included in the framing, but in addition to the original contents of the frame.
Prevented nodes being created offscreen.

The node creation menu and the node paste menu item now always adjust the framing to include the new nodes in addition to the old framing.

Fixes #640.
Merge pull request #750 from johnhaddon/nodesCreatedOffscreen

Preventing nodes being created offscreen
Added CompoundNumericPlugValueWidget.childPlugValueWidget().

Every PlugValueWidget for any type of CompoundPlug should implement this.
Merge pull request #752 from johnhaddon/compoundPlugValueWidgetAccessor

Added CompoundNumericPlugValueWidget.childPlugValueWidget().
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