Consider this example

```
dust.helpers.helperWithError = function(chunk, context, bodies, params) {
  return chunk.setError('there is an error!')
};
dust.loadSource(dust.compile('{@helperWithError/}', 'tl1'));
try {
  dust.stream('tl1',{})
  .on("[ONDATA]", function(data){
    console.log('data', data);
    })
  .on("[ONERROR]", function(error){
    console.log("error",error);
  })
  .on("end", function (){
    console.log('[ONEND]');
  });
} catch (err) {
  console.log('[TRYCATCH]', err);
}
```

This generates uncaught exception:
`Uncaught Error: Chunk error [there is an error!] thrown. Ceasing to render this template.`

Since `dust.stream` is executed asynchronously we can't catch error with try\catch.

First, there seems to be a bug with context.setError + dust.stream. This should definitely call on error handler.

Second, it appears that any exception thrown within `dust.stream` call won't be caught with surrounding try\catch because of the asynchronous nature of the call. This is problematic.