compiler: Add IR comment with trampoline location

Scheme uses many anonymous procedures, both explicitly and implicitly
with syntax such as (begin) and (let). This makes it difficult to track
down the owners of various anonymous procedures. Even with named
procedures name clashes from different scopes are problematic when
examining IR output.

Add a comment to Scheme procedures and trampolines indicating their
source location in an attempt to disambiguate.
compiler: Simple occurrence typing

- Add IntermediateValue.withSchemeType that allows an intermediate value
  to be duplicated with a new type. This is currently only implemented
  for CellValue where it's the most useful

- Add ConstrainType object. This tracks its own opaque state attached to
  PlannerState and can modify PlannerState by applying type constraints.
  Internally it will recreate all immutable values with constrained
  types using withSchemeType

- Register constrained types for procedure operands on application. Once
  the application has completed successfully we know the values satisfy
  the types specified in the procedure's signature

- Add a system of conditional type constraints that can be applied once
  a condition value has its type constrained to definite false or
  definite true-y. This is used to implement occurrence typing with type
  predicates in conjunction with (if), (and), etc.
compiler: EmptySchemeType improvements

- Add documentation for what EmptySchemeType means and change a lot of
  open coded usages of UnionType(Set()) with EmptySchemeType

- Ensure that nothing satisfies EmptySchemeType except itself and that
  it satisfies every type. Previously None was being returned in those
  cases because the union logic didn't handle the empty union correctly.

- Add some additional unit tests for cases that were already working
  but not explicitly tested
compiler: Fix error typo

s/iinteger/integer/
llvmir: Support for fcmp

This is similar to icmp except without the signedness issues. This is
unused by the compiler at the moment
compiler: Add planning for flonum comparisons

Note this does not cover the more general case of <number> as that
requires generating tests for the number's type.

- Support static planning for flonum comparisons with other flonums and
  exact ints

- Support generating fcmp instructions for comparisons between flonums
Reimplement zero?, positive?, negative? in Scheme

This gives our planner more visibility in to what these procedures are
doing. This means they can potentially static planned or have their type
checks removed depending on the operands.
compiler: Fix omitting world ptr for Scheme procs

The logic for stripping the world pointer for Scheme procedures was
completely broken. It wouldn't leave the world pointer as a named
argument and in the procedure's signature which means it would cause a
GC safe point every time a Scheme procedure was applied.

Fix PlanLambda and add a simple unit test to ensure trivial Scheme
procedures don't have world pointers.
stdlib: Fix integer?, implement rounding

- Implement (floor), (ceiling), (truncate), (round) on top of the C
  standard library functions

- Fix (integer?) to properly return #t for inexact integers (i.e.
  integers represented as inexact rational values). This is implemented
  on top of (floor)
stdlib: Re-implement (nan?) in Scheme

This is easily implemented on top of (eq?) and allows static planning if
the argument is statically known.