Improve optimizer:
 - Properly short circuit and handle variable number of operands for conditional and/or
 - Perform strength reduction for multiply/divide
 - Handle overflow properly when optimizing
Added optimizer test