Avoid capture of local variables during instrumentation of Property nodes

Change the instrumentation of property access expressions to refer to
expression components via function parameters, instead of capturing
them from the enclosing scope. The capture forces local variables to
be context (i.e. heap) allocated, which is bad by itself, but it was
even worse, because context allocated variables are potentially shared
and access to them is logged by ER.

Now, in the property expression |obj.key], if |key| is a literal, the
expression is rewritten into a call like:

    |(function(o) { return ER_readProp(p, "key", o.key); })(obj)|

If the |key| as a general expression, the property expression is
rewritten into a call like:

    |(function(o, k) { return ER_readProp(o, k, o[k]); })(obj, key);|