compiler: Switch number caches to LongMap

This should improve code generation performance for programs with many
numeric constants
compiler: Add comment for LiveValuesAtBarrier

This is a fairly complex function with behaviour that's tailored to a
specific use case. Add some comments about its functionality and logic.
compiler: Don't stack trace MatchFailedException

Generating stack traces is relatively expensive and MatchFailedException
is only used for flow control. This should speed up the macro expansion
logic.
runtime: Make trivial cell constructors public

This is to allow these cell types to work with range allocations more
easily

- Explicitly delete the heap allocation new operator for AnyCell and its
  subclasses. This should make it harder to allocate cells outside of a
  world. This was part of the motivation of make constructors private
  initially

- For trivial cell constructors with an obvious function make the
  contructor public

- Annotate the newly public cell constructors with "explicit" where
  appropriate
stdlib: Have (apply) take a RestArgument

This allows us to skip validating the proper list and handling the error
case. This is important as lliby_apply is potentially a hot path.
stdlib: Implement truncating division

This implements (truncate/), (truncate-remainder) and
(truncation-quotient) in C++. Native code generation will follow.
llvmir: Support for udiv, sdiv, srem, urem

These support integer division and remainder
stdlib: Fix comment
compiler: Planner support for integer division

This adds planning for (truncate/), (truncate-quotient) and
(truncate-remainder). If both the denominator and numerator are static
they will be evaluated at compile time. If only the denominator is
static then native instructions will be generated to calculate at
runtime.

Dynamic denominators are unsupported to avoid having to create inline
checks for division by zero.
compiler: Reimplement (odd?) and (even?) in Scheme

These can be efficiently implemented using (truncate-remainder) in
Scheme. As a side effect they can now be statically evaluated for
constant arguments.
stdlib: Add (quotient) and (remainder)

These are just legacy aliases for (truncate-quotient) and
(truncate-remainder)