Ensure cfOp's args are always constant-folded to CfVal first.
Simplify conditional expressions to AND or OR when one branch is a boolean literal.

Together with the existing rules for constant-folding AND/OR, this
eliminates the (expr ? false : true) construct that bitToBool generates.
Simplify logical NOT of Eq/Neq/Gt/Lt operators.
Apply constant-folding to initializers too.
Eliminate empty blocks in if-statements.

Makes the code generated from ivory's `unless` construct, for instance,
more readable.
Constant-fold int min/max literals to ExpMaxMin.

This allows other constant-folding analyses to quickly check for
constants of the min or max value for the appropriate type without
needing to know what type that is.
Fix/refactor constant-folding bitwise AND/OR of min/max values.

Includes a bug fix: bitwise-OR of all-ones with any value is all-ones, not just 1.
Fold any constants joinable by associativity and commutativity.