compiler: Add tests for +nan.0 comparisons

This ensures that +nan.0 is unordered in various situations. This
already worked correctly but it's a tricky area especially with respect
to optimisations

This also introduces (typed-dynamic) as a macro that wraps:
(cast (typeless-cell value) <type>)

This is a fairly frequent pattern to erase a value's identity but
constraining it to a specific type. This is useful to test the type
system or certain optimisations (in this case the native floating point
generation).
Make (inexact) always succeed

Previously (inexact) would fail if a passed integer couldn't be
precisely represented by a double. This has a few issues:

- This is unlikely what callers expect. R7RS allows implementations to
  fail if there is no "reasonably close" inexact representation but in
  relative terms all 64bit integers are reasonably close to their double
  representations

- This is inconsistent with the implicit conversions that arithmetic
  procedures will perform when dealing with mixed arguments

- This makes optimisation more difficult. We now don't have to make
  (inexact) a world function (and therefore a GC barrier) and can use
  native instructions to convert known integers to inexact values.
compiler: Move comment to correct place
llvmir: Add 100% test coverage

This adds and tweaks a few tests to bring us to 100% test coverage as
measured by scoverage.
compiler: Move (finite?), (infinite?) and (nan?)

These belong in (scheme inexact), not (scheme base)
compiler: Implement (abs)

This is a straightforward Scheme implementation.
stdlib: Consolidate equivalence functional tests

These tests were originally written before test assertions were
implemented. Many similar tests can now be grouped together.
compiler: Support negative zero

The planner, runtime and codegen didn't account for the fact negative
zero compares as numerically equal to positive zero. This adds support
for negative zero and adds unit tests.
compiler: Add --dump-plan

This will pretty print the generated plan to standard out. This is
useful for inspecting which choices the compiler is making at a level
above the raw LLVM IR.