Optimised repeat calls to Context::hash().

Also added python binding and a test.
Added Context::changed() method.

This is an official means of letting the Context know that an entry has been changed behind its back (through shared or borrowed ownership for instance). It avoids constructing the changed signal unnecessarily (previously it was documented that such changes must be accompanied by a manual emission of the signal), and ensures that the lazy hash computation is invalidated appropriately.
Made Context::hash() ignore "ui:" prefixed entries.

In general these entries have become a bit of a nuisance - there are now many places where we have to ignore them because they're not relevant to computation, and we don't want small changes in the ui to trigger recomputes. There's a good case for making the UI use a second structure for UI specific entries, but for now we do the pragmatic thing and ignore them in one more place. On the bright side, we can now remove special case code from ExecutableRender and SceneWriter, so the net effect is one less special case.
Refactored ValuePlug::hash() to delegate to Computation.

This makes more sense as hash() and compute() are inextricably linked, and putting all the logic in one place opens up the possibility of abstracting the Computation class to allow alternative implementations in the future. It also makes ValuePlug::hash() and ValuePlug::compute() simple and symmetrical.
Optimised computation for long chains of nodes.

This reduces scene traversal time for a chain of Attributes nodes below a SceneReader as follows :

10 nodes :   42% reduction
100 nodes :  93% reduction

Fixes #963.
Merge pull request #986 from johnhaddon/computationOptimisation

Computation optimisation