Added support for array metadata in OSLShader.
Simplified OSLShader::*Metadata() python return types.

Using dataToPython() to convert simple data types to their held types on return. This is in keeping with the return values for Contexts and Metadata elsewhere.
Added UI support for OSL "help", "label" and "divider" metadata entries.
Added NodeAlgo support for plug presets specified en masse via arrays.
Added support for mapping OSL shader metadata to plug presets.

Presets are specified in OSL via the "options" metadata entry.
Added "layout:widgetType" metadata entry.

This is used by the PlugLayout class to allow the type of PlugValueWidget being used to be overridden by Metadata. This will form the basis for the UIEditor specifying custom widget types, and for supporting OSL metadata for widget types.
Fixed GafferOSL for use with OSL prior to version 1.6.

Also added Python bindings exposing the OSL version.
Added GafferUI.LayoutPlugValueWidget.

This will replace CompoundPlugValueWidget in our ongoing refactoring of the UI. Adding this rather than trying to slowly refactor CompoundPlugValueWidget to become it because :

- CompoundPlug itself will be removed in the future so the CompoundPlugValueWidget will make no sense.
- CompoundPlugValueWidget is intertwined with several derived classes (ClassParameterValueWidget, SectionedCompoundPlugValueWidget etc), and this will allow us to migrate those to use LayoutPlugValueWidget over time without affecting the others. The trickiest refactoring is in the GafferCortexUI stuff, so it might be that we can move CompoundPlugValueWidget into GafferCortexUI as an intermediate step at some point.
- It gives us a clean break, where we can ensure that all new features are driven by metadata, rather than being tempted to keep using the non-metadata driven features of CompoundPlugValueWidget.
Deprecated CompoundPlugValueWidget.
Added support for OSL "widget" metadata.
Merge pull request #1140 from johnhaddon/oslMetadataRebase

Metadata driven UI for OSL shaders