Additional NumberIsFloat attribute fixes

Previously we were changing the types of DoubleConstant instances to
float, which had the potential to introduce casts to FloatConstant in
the compiler. Since there is no implicit cast from DoubleConstant to
FloatConstant, this resulted in an internal compiler error. Now we
leave constants untouched, but add double to float casts in the Binary
and Unary Resolve flows. Constant folding then resolves these casts to
float literals, preventing any runtime double/float conversions.

This change also fixes typing for local variables defined as "const".
Since these variables end up being variable expressions, they were not
being handled by the visitor (since the type wasn't known). The
conversion now happens in VarExpr.InferType.
Merge remote-tracking branch 'origin/master' into performance-mode