Bug fix in instance merging -- differing lockgeom should invalidate merge.

We try to merge multiple identical copies of instances within a shading
network by elaborately checking if all their parameters and connections
are different. But we overlooked one factor: if the corresponding
parameters in the two instances were delcared with DIFFERENT lockgeom
overrides.  This could cause confusion for sure, because under such
circumstances, the parameters don't mean the same thing in the two
instances (one will search for userdata/primvars, the other will not).
Optimizer bug fix: outparam_assign_elision was overly aggressive when
the output param in question was a renderer output (and thus HAD to
perform the assignment to put the value in the right place).
New ShaderGroupBegin variant that takes a text description of a shader group

This is half the work to allow serialization of the set of Parameter, Shader,
and ConnectShaders calls that fully assemble a shader group.  Here is an
example:

    ShaderGroupBegin ("groupname", "surface",
                          "param float fin 3.14; " /*concatenate string*/
                          "shader a alayer;"
                          "shader b blayer;"
                          "connect alayer.f_out blayer.f_in;");

Add --group command to testshade so this can be tested and used from the
command line. Here's an example:

    testshade -v -group "param fin 3.14, shader a alayer, shader b blayer, connect alayer.f_out blayer.f_in"

(Commas are an allowed substitute for semicolons for statement separators,
and the last statement separator is optional if it's at the end of the
string; this makes it easier for command line use, where semicolons have
special meaning.)