Handle multiply with constant zero.
Handle multiply with constant zero.

Multiply of any expression with constant 0 will always return zero.
We can handle this early, during elaboration, and save a lot of code
downstream the trouble.

Also, while we are at it, fix up test_width to re-test the left
expression width if the right expression width is unsized. This allows
for the left expression code to adapt to the unsized-ness of the
expression context.
CastMi/iverilog,themperek/iverilog,CastMi/iverilog,CastMi/iverilog,themperek/iverilog,themperek/iverilog