Added string matching function.

This is extracted from PathMatcher and will be used as the basis for unifying string matching across Gaffer as required by #707.
Replaced Metadata regexes with new string matching code.
Added Metadata signals emitted on registration of values.

This should be useful for updating UIs automatically when Metadata changes.
Added Metadata signalling when dynamic Box metadata changes.
Removed DisplaysPlugValueWidget._childPlugWidget().

The same can be achieved with a PlugValueWidget registration. I'm aiming to reduce the number of implementations of these special methods of CompundPlugValueWidget, with the aim of eventually removing them all, making the codebase easier to refactor.
Reimplemented StandardNodeToolBar with new GafferUI.PlugLayout class.

The old internal implementation was vulnerable to plugs changing names, as documented in the comments. The new PlugLayout class doesn't have this vulnerability as it uses the fact that IECore.Refcounted __hash__ and __eq__ are now implemented sufficiently to use a RefCounted object as a dictionary key. The same vulnerability exists in the implementations for CompoundPlugValueWidget and StandardNodeUI - the intention is to refactor both of these over time to use the PlugLayout class, and improve the PlugLayout to allow sectioning driven by Metadata, allowing it to provide user-designed UIs for the Box class.

It's necessary to introduce a new class here rather than improve on CompoundPlugValueWidget for a couple of reasons :

- CompoundPlugValueWidget can only display plugs which are children of other plugs - as it derives from PlugValueWidget it must accept only parents which are themselves Plugs. This makes it unsuitable for use in the top level uis in StandardNodeUI, where the plugs are held directly on a Node.
- CompoundPlugValueWidget has become quite unwieldy with many subclasses implementing various _protected() methods that customise its behaviour. Over time we should replace the CompoundPlugValueWidget internals with PlugLayout too, but that will be a bigger undertaking whereby we'll have to deprecate various things and rejig several derived classes. In the process of doing this we need to reduce the coupling between all these components, using Metadata as much as possible to control behaviour instead.
Reimplemented UserPlugValueWidget using PlugLayout.

This will allow us to move forward with the PlugLayout for customising Box UIs. Ideally we'd be reimplementing the CompoundPlugValueWidget too, but as described in the previous commit, this is problematic at present.
Implemented PlugLayout updates triggered by Metadata changes.

Currently this just allows dividers to be added and removed on demand.