First of all, thanks for the merge :-)

Of course I'm happy to adjust the implementation according to your wishes, but I'm a little confused. As far as I can see there are the following cases:

1. errors that are propagated via callbacks.

2. synchronous exceptions:

        function bad(cb) {
          undef(); // throws without calling cb
        }

3. asynchronous exceptions in modules written in the technology under consideration:
  
        function bad_plain(cb) {
          fs.readFile('foo', function(err, data) {
             if (err) return callback(err);
             callback(null, undef());
          }
        } 

        var bad_fibrous =
          fibrous(function() {
              fs.readFile.sync('foo');
              return undef(); // throws asynchronously
          });

        function bad_sjs() {
          require('sjs:nodejs/fs').readFile('foo');
          return undef(); // throws asynchronously
        }

4. asynchronous exceptions in foreign modules. 
E.g. a module that exposes `bad_plain`, called from SJS or fibrous.

AFAICS, all technologies can handle 1 and 2, whereas only SJS and fibers gracefully handle 3.
As for 4, that doesn't work in any technology, does it?