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.