Simplify runtime lookup tree
The current qmark tree looks like `tmp = cond ? tmp : indir` and it ends up generating a block containing `tmp = tmp` that is not eliminated.
Take advantage of the fact that qmark can have TYP_VOID and contain assignments to generate something like `if (c) { tmp = indir } else { }` that avoids the useless `tmp = tmp` assignment.
Also, the original code allocated two temporaries when one is sufficient.
Commit migrated from https://github.com/dotnet/coreclr/commit/
018656367499b146ff5bad5c2cbe8c7eb7f5639e