Documented an unresolveable problem with Serialisation::classPath().
Improved CompoundDataPlug data representation.

It now uses a new MemberPlug type to store the data, which provides some type checking and protection against rogue children being added. It also provides the future potential to replace the add*Member() methods with something tidier (see todo). To be honest though, this is mainly motivated by a desire to have a separate TypeId for the member plugs so that we can register a custom UI for them that'll still be picked up after they're promoted to a Box (UI code to follow).

This does break backwards compatibility with existing files containing CompoundDataPlugs with dynamic children. It should be a one-liner to provide compatibility at the expense of the removal of some type checking, but I'd rather break compatibility if people can cope fixing up existing files.
CompoundPlugValueWidget using PlugValueWidget.hasLabel() to avoid unecessary labelling.
Registered a custom UI for CompoundDataPlug::MemberPlug.

This means that promoted member plugs keep their original formatting in the UI.
Improved BoxUI by transferring custom UI registrations from internal plugs.
Fixed bug where deleted children of Boxes weren't deselected.

In the course of doing this I introduced a new Behaviour class and an OrphanRemover behaviour, which removes nodes from a set when they lose their parent. We have several other candidates for behaviours (min/max plug constraints, input generator, etc) so we'll be fleshing out the Behaviours namespace over time.

Fixes #430.
Fixed bug where pinned nodes were still visible in the UI after being deleted.

Fixes #308.
Improved test case to also check intermediate results from promoted plug before serialisation.
Improved CompoundDataPlug::MemberPlug::acceptsInput() implementation.
Added todo.
Merge pull request #428 from johnhaddon/promotedPlugValueWidgets

Promoted plug UI improvements
Merge pull request #431 from johnhaddon/hideDeletedNodes

Bug fixes for hiding deleted nodes
Fixed GafferTest.BadNode to derive from ComputeNode.

It was totally broken but going unnoticed because its role in the test cases is to do things wrong.
Removed expectedFailure test case.

Realistically we can never make this one pass - and it doesn't expose a bug, just a feature that would be very nice.
Removed expectedFailure decoration for test which now passes.
Marked ScrolledContainerTest.testChildAccessors as an expected failure.

There's little hope as fixing this as it appears to be a problem on the Qt side. Using expectedFailure for this test required some jiggery pokery in the TestCase class, which is documented in the comments there.
Fixed bugs caused by recent merges.

The Plug::ReadOnly serialisation changes and the CompoundDataPlug::MemberPlug changes weren't compatible.
Bumped version number and update Changes file.
Added mechanism for catching key press events to GafferUI.Window

This is currently configured to catch the Control and Shift key presses in maya, which were previously causing funky focus stealing behaviour
Merge branch 'master' of https://github.com/ImageEngine/gaffer