Added codegen for ForExpr
Proper precedence wrapping for assignments.

Block expressions now properly wrap the expressions they assign to their resVar (result variable). This fixes the issue where

    var x Int = 0;
    for (true) { x = x + 1; }

would be compiled to

    int x_var = 0;
    int tmp0;
    for (; true;) {
        tmp0 = x_var = x_var + 1;
    }

instead of the proper `tmp0 = (x_var = x_var + 1);`.