Validate new expressions
Fix command block scope

If or while, both have one or more blocks. So is a 
function declaration. The problem is that function 
declarations creates new scope. 

The close bracket of scope_block modify the stack
level used to check scope rules. The bug was a
"if" command closing bracket triggering this stack
modification erroneously.
Add bug check
Support unary expressions
Support binary expressions with type coercion