Enabled GafferOSL build in IE config.
Removed hardcoded OSL version in IE config.
Added ability to have child Gadgets to Gadget base class.

Previously this was only allowed for the ContainerGadget class and derived classes. This was a little odd, as it meant that the ContainerGadget::acceptsChild() implementation was less restrictive than the Gadget::acceptsChild() implementation - the general rule is that derived classes may be more restrictive, but must not accept something the base class can't handle.
Rederived NodeGadget from Gadget rather than IndividualContainer.

It was always strange that NodeGadget should have an is-a relationship with a pretty restrictive container - deriving straight from Gadget makes more sense and provides more flexibility to implementations. It also prevents it from being possible to totally clobber the NodeGadget's implementation by calling setChild( somethingElse ).
Added methods controlling Gadget visibility.

These mirror the semantics of the identical methods already existing on the Widget class. Invisible child gadgets are not counted towards the bound of the parent, and do not affect the layout computed by containers.
Rederived ViewportGadget from Gadget rather than IndividualContainer.

This allows viewports to have multiple child gadgets, which will make it easier to implement more complex Views, and pave the way for allowing interactive tools like manipulators to add their own content to the viewport.
Added a grid to SceneView.
Switched SceneView::Grid updates from plugSet to plugDirtied signal.

As per the Node documentation, plugDirtiedSignal() is the appropriate one for observers of a plug to use - it is triggered any time the observable value has changed. This makes the SceneView more robust to having input connections to the grid plug, rather than just having the values set directly.
Added simple viewer preferences section with grid dimensions.
added workaround for if a StandardAttributes is saved with an incoming connection to attributes->visibility->name
Optimised ComputeNode::hash().

The call to relativeName() was expensive because it was allocating memory. It's quicker to just iterate up the hierarchy ourselves and directly append each name we find along the way. I had tried optimising this in the past, but never got any measurements that confirmed a speedup. Now we've got much superior performance from temporary Contexts, the relativeName() cost comes through more clearly and there are obvious measurable benefits. A simple Constant->Reformat benchmark shows ~14% reduction in runtime, and a SceneReader benchmark shows a small but measurable improvement.

Also added some documentation for why the hash is computed the way it is.
Merge pull request #858 from davidsminor/standardAttributesIncomingConnection

StandardAttributes incoming connection workaround
Merge pull request #859 from johnhaddon/hashOptimisation

Optimised ComputeNode::hash().
Updated Changes file.
Moved MetadaBinding implementation into unnamed namespace.
Removed custom TypeId argument handling from Metadata binding.

This is now taken care of for us by Cortex.
Made UI registration methods accept classes in place of TypeIds.

This matches the less verbose form we've always used for registering Metadata, and the form that is now available for all C++ registrations thanks to a new converter in Cortex.
Omitted staticTypeId() calls wherever possible.

This includes the following places :

- Factory registrations for PlugValueWidget
- Factory registrations for NodeUI
- Factory registrations for NodeToolbar
- Factory registrations for ParameterValueWidget
- Calls to GraphComponent.ancestor()
- Calls to GraphComponent.children()
- Calls to GraphComponent.commonAncestor()

This makes for more readable, more pythonic code.
Updating version and changes
Merge pull request #861 from johnhaddon/typeIdBinding

Removed unnecessary staticTypeId() calls