Move defines from (scheme core) to inexact/write

These procedures belong in (scheme inexact) and (scheme write) but were
erroneously included in (scheme core)
Add IncludeLoader and the concept of include paths

The IncludePath keeps track of which directories to search when loading
includes and libraries. IncludeLoader uses the IncludePath to locate and
parse referenced Scheme files (libraries and includes)

Libaries are searched in this order: current pacakge root directory,
user-provided paths, system library directory. Current file relative
libraries make little sense because the full path to the library from
the package root has to be included in the library's definition. There
is currently no mechanism to provide user paths.

Includes are searched in this order: current file's parent directory,
user-provided directories. The current file's directory is searched
based on the recommendation of R7RS. Searching both the current
directory and package root could introduce ambiguity and confusion so
only the former is searched. Currently there is no way to (include) at
all due to lack of frontend support.

At the same time collapse LibraryLoader in to DefaultLibraryLoader.
There was no advantage to separating out the interface of the library
loader from its implementation. All configurability can be accomplished
from the include path
Implement (include) for programs, library bodies

This is a fairly simple implementation that ignores the body/non-body
context issue for now. See the comments in extractInclude for why that
may be acceptable.
Implement top-level library includes

This implements (include) and (include-library-declarations) on top of
the ResolveIncludeList infrastructure. These are handled the same way as
(include)s in library bodies but require special handling as top-level
library declarations.