compiler: Handle tail calls from nested (if)

Tail calls weren't being propagated inside nested (if) statements. This
is important to handle as syntax such as (cond) can map to large nested
(if) chains.
compiler: Planning for many-valued number compare

The existing planner for (=), (<), etc. only supports planning with two
operands. This was under the assumption that planning with many operands
is relatively rare and not worth the complexity. However, (<= lower
value upper) is an idiomatic way of performing a range check. It turns
out that a type annotated version of the R7RS life example spends more
than half its time in lliby_numeric_lte checking vector bounds.

Implement by doing a sliding comparison on each pair of values and then
using ps.CondBranch to merge their results together. This generates the
same plan for two operands as it did previously and has been confirmed
to produce sane assembler on x86-64 in the many-operands case.

This also adds a fairly awkward functional test for this code path.
It's difficult to trigger with more straightforward tests as they will
have their results statically evaluated.
compiler: Fix typos in functional test names
compiler: Add occurrence typing for number preds

(exact-integer?), (exact?) and (inexact?) aren't direct type predicates
because they only work on values of the type <number>. This means they
didn't participate properly in occurrence typing. This is a bit tricky
because it was impossible for ReportProcPlanners to interact with
occurrence typing.

- Instead of having all ReportProcPlanners return ResultValues have
  three methods: planWithResult, planWithValues and planWithValue
  depending if they return a PlanResult, ResultValues, or
  IntermediateValue respectively. This allows the ReportProcPlanner to
  have access to the occurrence typing state if desired but without
  every planner requiring the boilerplate.

- Convert most existing ReportProcPlanners to planWithValue except for
  ValuesProcPlanner and ApplyProcPlanner which require multiple value
  support

- Add NumberPredicateProcPlanner which explicitly plans the number
  predicates and interacts with occurence typing

- Add functional tests with occurrence typing