param parser: Remove unnecessary var in hMockParam()
Add symbMakeParamOptional(), to add initializers after creating the params

This allows the parameter declaration parser to add the param symbol
before parsing an initializer expression; that way it can check the
expression against the parameter symbol directly.

This simplifies the parsing code a bit, and will allow cInitializer()
to be called on the param symbol directly (instead of having to use a
temp var) in a follow-up patch.
param parser: Call cInitializer() directly on param symbol

This patch fixes bad code generation when param initializers are used in
calls to their parent proc from inside procs other than the implicit
main().

cInitializer() was given a local temp var, tricking it into thinking that
a temp scope was not necessary. However, in case of param initializers,
a temp scope is actually needed, to capture any temp symbols allocated
while parsing the initializer expression (e.g. iif() temp vars), so that
these temp symbols can be duplicated into the scope contexts where the
initializer expression is "instantiated" in.

Since no temp scope was used, all temp symbols ended up in the current
scope at the time the param initializer expression was parsed (probably
always (?) the implicit main() scope), and were *not* duplicated into
the scope contexts corresponding to each instantiation of the param
initializer expression.

This then caused bad code to be generated when calling a proc with an
param initializer like that from inside a proc other than the main() proc.

This patch changes the parser to pass the param symbol to cInitializer()
directly, instead of using a temp var local to the main() scope.
cInitializer() already has code to handle param symbols being passed in,
although it apparently was not used until now (perhaps by accident), and
specifically, params are never locals, so cInitializer()/astTypeIniBegin()
will create the needed temp scope and handle any temp symbols.