(#21252) Fix problems with false/nil args and returns in lambda

The issue 21252 was triggered by a documentation error but should
have produced a different result than the error that was presented.

This was caused by a series of problems. It was not possible to
pass `false` as a parameter value as this was taken as missing parameter
value.

Also, it was not possible to return the value `false` as this was
translated to `nil` due to defective work around for missing initialized
variable on return.

The fix changes the handling of making sure that the variable that is
returned exists (by setting value explicelty to `nil` before the start
of the exception handling block.

This commit also modifies how a lambda call matches arguments to
parameters and checks what is missing (now with `false` as a valid value
in mind).

A test is added to `collect` that checks that a value of `false` can
both be passed and returned.