Refactor scopes and allow `js` to use variables from the current scope

* There is now a Scope class that encapsulates all scope functionality
* A `js` form can use variables from the current scope like this:
  // Evaluates to `20`
  ['let',
   [['x', 10]],
   [['js', function(y) {return this.get('x') * y;}], 2]]
Refactor: definitions, repl and scope modules

* The repl module's repl function now takes an interpreter argument
* The global scope is created in the definitions module
* Everything from the Math module is imported into the global scope
* The scope class is in its own module
Get rid of the `js` form

Having two different ways of calling javascript functions seems
annoying. This way, native functions like Math.sqrt and user-defined
functions can be called the same way. If the function uses `this` for
something, there will be problems though.

Binding Math.* in the global scope seems overkill now, since it can be
used directly:

    // Returns `3`
    [Math.sqrt, 9]
Fix typo in README