Add simple pass to infer argument types

If the first use of an argument is checked cast to another boxed type
then convert the argument to that type. This misses a lot of corner
cases but catches cases like arguments only being used to be passed to
other procedures.
Add LibraryLoader.exists()

This is to be used for testing for library existence in (cond-expand)
Add endianness support to platform.TargetPlatform

This splits the platform.Posix{32,64} platforms in to
platform.Posix{32,64}{BE,LE}.

Our code generations should be endian agnostic and even testing a
big-endian platform is purely theoretical.  However, this is required
for feature identifier support which is required by (cond-expand)
Add compiler.FeatureIdentifiers

This tracks the feature identifiers provided by the compiler and
platform. Additional feature identifiers can be passed to the compiler
using --with-feature-ident, similar to how -D can be used to control
ifdefs in C-based languages.
Add FrontendConfig

FrontendConfig is the IncludePath and the feature identifiers for the
current compilation. This mostly replaces the use of IncludePath except
for low-level include logic that does not need to recursively extract
any modules.
Add CondExpander + unit tests

This is the backend engine for (cond-expand) support in
ExtractModuleBody. It supports all of the syntax defined in R7RS
Hook up frontend support for (cond-expand)

This implements (cond-expand) in ModuleBodyExtractor. This simply hooks
up the functionality implemented in previous commits.
Rename schemeInexactPair => schemePair

The previous name was likely just a copy/paste error
Support for LLVM IR aliases

This will be needed for generating a list of our feature identifiers.
The head of the identifier proper lists need to be aliased to a public
symbol name. We could treat the head of the list specially but in the
case of an empty list we'd need to alias anyway.
Implements (features)

This compiles in a list of feature identifiers and a simple procedure to
return them. Exporting the symbol to the stdlib as an alias was causing
weird segfaults and this method allows the feature list to be removed
from the final executable if it's not referenced.

There is no unit test because the returned lists aren't easily
searchable without (member) and related functions. These should be
implemented next.