Document ps.{Push,Pop}DynamicState
compiler: Add planners for eqv?, equals?, not

This is built around a new IntegerCompare plan step which is turned to
in "icmp eq" in the generated IR

- Add planner for (eqv?)/(equals?) that knows how to perform direct
  pointer comparisons and unbox exact integers/characters to compare
  them. It will also replace comparisons with impossible types with
  constant false. Any comparisons that can't be performed with a single
  icmp are left as calls to to the stdlib

- Add planner for (not) that just inverts the predicate of its argument
compiler: Planner for exact int compares

Add planner for simple comparisons between two exact integer using
ps.IntegerCompare
compiler: Fix swapped block labels

fieldIsUndefined/fieldIsDefined has their labels swapped in the IR
output. This had no effect but made the IR output is confusing
compiler: Add planner for (vector-length)

This just loads the length of the vector directly from the cell. This is
easier for LLVM to optimise than a function call.
compiler: Add planner for (apply)

This reduces the amount of code generated and executed for (case-lambda)
by short circuiting the call to lliby_apply

- Add tracking of definite proper lists to the planner. Right now this
  is just empty lists, constant proper lists and arguments

- If (apply) is attempted with a single definite proper list cast it
  value to the procedure cell and open code the logic for (apply) as
  plan steps.
llvmir: Add support for add, sub, mul

This adds support for basic integer math. "div" is handled differently
and will require its own implementation.