Metadata driven UI for OSL shaders

This implements support for the standard OSL "help", "label", "widget" and "options" metadata, as well as a non-standard "divider" item. It also continues the metadata-focussed refactoring of GafferUI, and lays the groundwork for the UIEditor being able to change the widget types used in the UI.