Add import and extend interpreter interface

The interpreter now supports loading modules directly. This allows it to
handle both import statements as well as provide a module loading method
as part of its external interface. The module loader can be customised
by providing a function to the interpreter when it is constructed, but a
default using the Node.js file system is available. This default is also
exported so it can called by a custom module loader. Modules are cached
in the interpreter and paths are normalised to ensure that overlapping
imports are not processed more than once.

The interpreter cloning mechanism has been modified to use JavaScript's
prototyping rather than directly copying across all of the constants
into the clone.

The command-line script has been updated to include options to allow
defining the root of the module hierarchy, which sets up a custom
module loader. The root can also be derived from the directory of the
main module.
Add dialect scoping and interactive modules

Dialects are now parsed and interpreted, loading the requested module
and replacing the default prelude with the resulting object.

The main script now accepts an option to indicate interactive mode that
can be combined with a file name to load that module as the dialect of
the REPL. A new 'enter' method on the interpreter allows the creation of
a consistent object as the self value for the interactive mode.
Always use pretty output for methods and requests

The existing mechanism for building the name of a method or request was
frustrating because it required rebuilding the name with a different
parameter when the pretty form was required. The short form can always
be generated by stripping off the parentheses from a pretty form, so
the pretty form is now the only output of the name method.