Changing `if` to require the condition to be a boolean instead of a
'truthy' value.

This has several advantages. Firstly, it makes a type checker more useful
since previously the condition to `if` could be any type.

Secondly, it's more explicit. Compare:

    (if user-health (next-level) (game-over))

With:

    (if (zero? user-health) (game-over) (next-level))

Finally, it also helps catch errors earlier. Suppose a user writes:

    (if some-function (foo) (bar))

When they meant to write this:

    (if (some-function) (foo) (bar))

Previously this would be a subtle bug where `(foo)` is always
executed. Now, this is produces a helpful error.