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.
put a GIL release into the setValue() python methods for TypedPlug and CompoundNumericPlug
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