Rename et.Apply.{function => procedure}

Refer to Scheme's idea of procedures as such and reserve "function" for
the LLVM concept of a function. At the ExpressionTree level we're
referring to prodecures, not functions.
Function signature improvements

- Remove nfi.NativeSignature.nativeSymbol. When applying boxed
  procedures we need to call a function pointer without knowing the
  native symbol it corresponds to. Keep et.NativeFunction.nativeSymbol
  where we actually know the symbol name

- Rename IrCallable to IrSignature. IrCallables aren't actually callable
  without the IrValue of the function pointer which made the name
  misleading. This also provides symmetry with the higher level
  NativeSignature and allows the renaming of NativeSignatureToIrCallable
  to the less wordy NativeSignatureToIr

- Make NativeSignatureToIr actually take a NativeSignature instead of a
  NativeFunction

- Add NativeSignature.hasSelfArg. This is for boxed procedures and
  procedures with closures that need their boxed value passed as their
  first argument.

- Make NativeSignatureToIr translate the rest arg to %listElement*
  instead of %pair*. This allows %emptyList* to be passed if there are
  no arguments
Fix incomplete BoxedType unit test

It looks like this test was started but never had its body filled out
CamelCase conversion instructions

These appear in the IR as "bitcast {value} to {type}" so it makes sense
to CamelCase the name in the Scala version
BoxedType enhancements

- Track each type's subtypes, name and abstractness

- Add isTypeOrSupertypeOf, isTypeOrSubtypeOf to inspect the type tree.
  This will be useful for code generation to see if certain casts or
  conversions are allowed

- Add genPointerBitcast that will automatically no-op if the passed
  value is already of the correct type
_lliby_fatal improvements

- Rename lliby_fatal => _lliby_fatal. This is an internal function that
  does not correspond to an R7RS procedure

- Add optional "evidence" argument. This can be used to show which datum
  caused a fault when performing datum-related operations such as type
  assertions
Add IrModuleBuilder.{isDeclared, unlessDeclared}

This allows code to avoid performing duplicate declarations without
tracking their own state regarding what has been declared so far.
Harmonize code generation interfaces

- Name code generation methods "gen*", function objects "Gen*"

- Make code generation functions take their builders in their first
  parameter list and the data to be built in their second list
Add GenFatalError

This will generate a call to _lliby_fatal with the passed description
string and optional evidence
Unprotect/unimplicit IrModuleBuilder.nameSource

IrModuleBuilder doesn't really control its namespace in the same way
IrBlockBuilder does as it has to deal with names across object file
boundries. However, it should be possible for callers to allocate their
own unique names. Expose the previously unused
IrModuleBuilder.nameSource for that purpose.
Add enough code generation to support Hello, World

This implements the bare minimum logic required to print "Hello, world!"
using lliby_write. This architecture will likely be greatly reworked in
the near future
Add Compiler entry points for strings, Scheme data

The Scheme functional test runner wants to invoke the compiler directly
on List[ast.Datum]. This exposes the required functionality
Add SchemeFunctionalTestRunner

This parses a Scheme resource file an executes the tests found inside.
This is hopefully more elegant and easier to edit than fixed strings
embedded in normal ScalaTest suite
Rename ast.{RealLiteral => RationalLiteral}

This reflects the restrictions of floating point numbers and also aligns
with the "inexactRational" boxed type
Make GlobalVariables pointer IrConstants

In LLVM IR global variables are actually just pointer to a location
statically known at link time. For example in:
@X = global i32 56

@X has the type i32*
Add BitcastToConstant

This allows constants to be defined in terms of the bitcast values of
other constants. This is required for constant pair generation which
requires boxedDatum* for its car and cdr
Add constant generation for all literal types

The compiler can now convert any constant datum to a boxed constant.