Allow iif() on UDTs

Allowing UDTs in the iif() type checks is easy enough, but dealing with
constructors is more complex.

If the UDT has any constructors, iif() must construct its temp var one
way or another (assuming that if there are one or more constructors, one
must be called). Either by constructing it from the true or false
expressions (i.e. in the true/false code paths), or by calling a default
constructor in either one of the code paths. And instead of calling the
default constructor in both code paths, we can emit one call before the
conditional branch to make the generated code smaller.

Constructing the temp var from the true/false expressions is possible if
the given expression is a variable of that UDT type and the UDT has a
copy constructor, or if the given expression is a CTORCALL node, i.e.
a UDT( ctor-parameters... ) or type<UDT>( ctor-parameters... ) kind of
expression. All that actually is handled by astBuildImplicitCtorCallEx()
though, we just need to check the is_ctorcall boolean it returns to see
whether any constructor actually matched and thus could be called,
because if not then we can try to call the default constructor and do
a shallow copy afterwards, or bail out and show an error if that's not
possible (if there is no default constructor, only non-default ctors for
which we don't know the arguments).