Merge pull request #798 from johnhaddon/boxUI

Editable Plug UIs for Boxes
Moved Metadata internals to anonymous namespace.

We don't want to expose them to the outside world.
Removed python/GafferUI/Metadata.py.

It was no longer imported by GafferUI/__init__.py since being replaced by Gaffer::Metadata in C++, but the file hadn't been removed as it should have.
Implemented per-instance Metadata for all Nodes and Plugs.

This will allow custom UI's to be defined for nodes other than Boxes.
Reimplemented per-instance Box metadata with new general functionality.

The methods on the Box are now deprecated and will be removed in future.
Converted BoxEditor into a generic UIEditor.

This allows the user plugs for any node to be given UI customisations.
Simplified Serialisation implementation.

We had nearly-identical copies of the code for iterating the root children and for iterating the children during walk(). Now all the work is done in walk().
Fixed Metadata loading/saving for Reference nodes.

We want the Reference node to load metadata provided by the saved reference, but we must ensure that we don't resave the Metadata into the script with the Reference in it - we want the referenced script to be the only source of metadata.
Fixed potential UIEditor plug reordering issue.

If the user accidentally dragged outside the editor, a drop event might never be sent, meaning that the changes wouldn't be flushed to the UI. Using a drag end signal ensures that we always flush the order when the drag ends.