Improve error handling and content mode

Variant of BEMTREE error hangling
[Issue 594](https://github.com/bem/bem-core/issues/594)
so you can use:
```
block('b1').content()(function() {
    return this.doAsync(function() {
        return doAsyncStuff();
    }).then(function (data) {
             return applyCtx({
                  block: 'b2', 
                  content: data,
                  b1Stuff: this.ctx.b1Stuff 
             }); 
        }, function (err) {
            return err; 
        }, this);;
});
```
or even:
```
block('b1').content()(function() {
    return this.doAsync(oAsyncStuff()).then(function (data) {
             return applyCtx({
                  block: 'b2', 
                  content: data,
                  b1Stuff: this.ctx.b1Stuff 
             }); 
        }, function (err) {
            return err; 
        }, this);;
});
```
Some part of old doAsync logic is in content mode now. I think, it's more convenient.