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 other 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.
SceneWriter::executionHash now accounts for the file name, 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.
ExecutableOpHolder::executionHash calls the base class first.

Also added tests, and we are returning the default hash if no op is set.
ExecutableOpHolder::execute performs context substitution on its parameters.

This is a workaround until scoping the Context takes care of it automatically.
Defined ObjectWriter::executionHash and added tests.

Fixes #878