Handling & operator
Using child(i) macro wrapper for tree_index(n, i) in symbol.c
Handling dereference operator and pointer assignments

When assigning, use LCONT if the rval is a dereference (and so skip
during processing of the dereference operator), and use SCONT is the
lval is a deference.
Setting ival for true/false constants

Using switch over if/else chain. I have better break; habits now.
Handling ||, && and ! operators

Added binary OR/AND opcodes.
Handling switch statements
Handling breaks and continues in loops using backpatching
Refactoring handle_switch() to avoid hairy tree traversal

Post-order traversal pushes markers for break/default label, and pushes
labels for labeled statements with their second place holding the case's
place, allowing it to fully build the code list for switch's
body.

The handle_switch() function now loops over the body code list and
backpatches break, generates test code, removes temporary second address
from labels, and returns the default label.
Returning default label from handle_switch()

Since it is no longer a traversal, there is no concern with returning a
value after loop iteration finishes, so we no longer need to pass it
back via the double pointer.