compiler: Add occurrence typing for equiv procs

This implements occurrence typing for (eq?), (eqv?) and (equal?). This
will intersect the types if the values compare equal and subtract type
type if they're inequal and it's being compared with a constant value
type.

- Move lliby_is_{eqv,equal} to core/ and prefix them with _ to indicate
  they're runtime functions now

- Add references to the new functions in codegen.RuntimeFunctions

- Have EquivalenceProcPlanner calculate proper type conditions on their
  resulting condition

- Have EquivalenceProcPlanner always plan, even if it involves calling
  the runtime functions. This has the side effect of letting us skip
  procedure type conversion for their operands

- Run EquivalenceProcPlanner at all optimisation levels. Have it
  explicitly disable the direct comparison planning if optimisation is
  disabled. Note that we will now do static value tests at -O0 which
  doesn't seem unreasonable

Closes #27
compiler: Better planning for (* n) and (+ n)

The return from a single argument (+) or (*) was being laundered through
a TempValue which made it lose information such as its constant value or
specific type. Use castToSchemeType which will just use the original
value if the type is already correct.
llvmir: Support for trivial floating point instrs

Add support for emitting fadd, fsub, fmul and fdiv
compiler: Support native float point math

- Introduce FloatAdd, FloatSub and FloatMul that are directly analogous
  to their integer counterparts

- Generalise NumberProcPlanner to support both exact integer and
  floating point values. The operands are reduced left and if a flonum
  and integer are being reduced they integer is converted to a flonum
  first. This matches the Scheme inexact value semantics