Fix ROOT-6523 (proper handling of reference in CallFunc with parameter array).

When passing directly the parameter to the wrapper function, the content of the array needs to be the address of the
parameter values.  When the function takes a parameter by reference, the array should contain the address of the
value referenced to.  When the function takes an object by value, the array should contain the address of the object.

Previously, when the function takes a parameter by reference, the wrapper code was expecting the address of a pointer
to the value.   When constructing the array of arguments passed only individually (via SetArg), reference and the
addres of by-value object were turned into the address of a (internally managed) pointer and the code was tweaked
accordingly ( reference being treated as a pointer to pointer and object-by-value being treated as a reference
(relying on its handling as a pointer to pointer) ).

(cherry picked from commit 5b11607c0aa3ff8d4a140bf80fcab54a2f64daf3)