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.
Improved test case to also check intermediate results from promoted plug before serialisation.
Improved CompoundDataPlug::MemberPlug::acceptsInput() implementation.
Merge pull request #428 from johnhaddon/promotedPlugValueWidgets

Promoted plug UI improvements