For clarity, it is valuable for the results of comparisons to show as "true"
and "false" rather than "1" and "0". This change implements a BOOL type
to facilitate that. Since we want logical operators to short-circuit, this
change also obliges the introduction of macros, which are just like functions
except their arguments are not evaluated before control is passed to the
routine implementing the macro.