Refactor: treat lambdas as values
Implement `let` and `js`

* `let` creates new variable bindings and executes its body with these bindings

* `js` is a convenient way to use javascript functions. A function is
  normally called using two parameters: scope and args. Using `js`, most
  js functions don't need to be wrapped. For example:

      ['js', Math.sqrt]

  instead of:

      function(scope, args) {
          return Math.sqrt(args[0]);
      }

  It's not yet possible to use bindings from the current scope inside
  the javascript function.