Fixed bug in Reference node menu item.

It hadn't been updated when ViewportGadget ceased to be derived from IndividualContainer.
Simplified Dispatcher implementations by providing doDispatch with the unique task list.
Dispatchers now require that all nodes belong to the same ScriptNode.
Added Frame Range options to Dispatcher.

Dispatcher generates its tasks by looping over the frame range provided. Derived classes will recieve TaskDescriptions which have already accounted for the frame range.
Added repeat parameter to test app.

When trying to track down hard-to-reproduce problems, it can be mighty handy to repeat the unit tests automatically.
Made uniqueTasks private
Removed unneccessary uses of IECore.curry
Renamed obscure test parameter and added todo to make test a bit cleaner.
Fully copying Contexts in the unit test.
Added todo to simplify DispatcherUI framesMode
Fixed ExecutableTest now that uniqueTasks is private.

Task uniqueness is tested by DisaptcherTest anyways.
Dispatcher plugs are serialisable.
Merge pull request #884 from andrewkaufman/dispatchFrameRange

Dispatcher Frame Ranges
Reimplemented ExecutableNode::Task comparison functions and member access.

All members are now private, with public accessors to the const values. The hash is defined at construction by the node's executionHash, and Operator == and < use the hash directly.

Fixes #865.
Improved Plug bindings with a new PlugClass helper class.

This matches the way other bindings are done, and removes the need to remember to use a nasty macro to bind the various Plug virtual functions.
Added immutability comments to ExecutableNode::Task docs

Also taking a copy of the Context at construction.
Merge pull request #886 from andrewkaufman/taskComparison

Reimplemented ExecutableNode::Task comparison functions and member access
Added typeId to the default ExecutableNode::executionHash
Fixed ImageWriter::executionHash to use the provided context.

Also added the writeMode and channels plugs to the hash, and added a short-circuit when the file or input image are empty.
ExecutableRender::executionHash now accounts for the input node and the context.

Note that we are hashing the address of the input node to work around the lack of a hierarchyHash. This should be safe because executionHash needs to be valid during Dispatcher::dispatch(), and no nodes should be deleted during that time.

I haven't added tests for ArnoldRender because I can't run it locally, but the OpenGL and RenderMan tests are nearly identical, and ArnoldRender doesn't override executionHash.