switch lazy logical operators to us PHI node to impove LLVM optimizations.
improving quality of lazy logical statements.
1. when lazy logicals are used as conditionals, they are folded into branching logic for the conditional
   (clang does this, so I assume its needed)
2. logicals are passed and returned from functions as i1, which seems to help optimizations. they are still stored as i8
   (i think this is also what clang does)
add test to check all boolean operators up to depth 3 against lua.