Box plug promotion

This adds the capability to promote plugs on nodes within Boxes onto the outside of the Box. Hopefully this will provide us with the framework we need for allowing users to build their own "gift boxes" - networks of nodes to be passed on to other users.

- Added a "user" plug available on all nodes. This provides a safe namespace in which users can create any plugs they want without fear of conflicting with future plugs introduced by the node.
- Generalised the Metadata class to allow arbitrary key/value pairs to be associated with Nodes and Plugs (formerly only description were supported).
- Simplified NodeUI into an abstract base class and added StandardNodeUI, which provides the ability to package different plugs into different tabs and a header section. This is controlled via Metadata entries, and the "user" plug is always presented in its own tab.
- Added API and UI for promoting plugs from the inside to the outside of Boxes. Plugs are always promoted onto the "user" plug of the Box.
- Added LabelPlugValueWidget to provide plug labels with additional functionality, including the popup menu necessary for promotion, and a tooltip generated from Metadata.
- Miscellaneous UI additions and bugfixes, several of which deal with attempt to edit plugs which have incoming connections - as they do when they have been promoted.