Allow delayed initialization of symbols.

The previous change removed the ability to change the type of a symbol
after initialization, but forcing the variable to be initialized
immediately makes it impossible to conditionally initialize. After this
change, constructs like the following are permitted as long as either
the if condition can be evaluated at compile time or both branches assign
a value of an identical type:

    var a;
    if (some_condition) {
        a = 1;
    }
    else {
        a = 2;
    }