Keep Bool type until the end.

In the original Min-Caml compiler the boolean type Type.Bool
was eliminated after Typing when the program was translated
into the KNormal form. However, since LLVM has a dedicated type
that models booleans (i1) it seems better to preserve the boolean
type until the end. This required some extensive (but straightfoward)
modifications of many files.

- In the original compiler the comparison 'Eq', 'LE', and negation
'Not', and the 'If' expressions were fused into either IfEq or IfLE.
Since now we have a dedicated boolean type throughout, I changed this back
to having separate 'If', 'Eq', 'LE', and 'Not' expression types throughout.

- I added cases to fold boolean constants in constFold.ml.

Something slightly related that will need to be looked at is the
implementation of polymorphic compare ('Eq' and 'LE'). Right now
the implementation looks at the LLVM types to try to determine
what to do, but this is a hack. Maybe we will have to carry the
type of the oparands all the way from the Typing phase to generate
correct LLVM code at the end.