Refactor error handling

With this change wrappers of `result` will not need to worry about rejected promises, but *will* need to check for a `result.error` property that contains the original error. That is, instead of this:

```javascript
app.wrap('result', function (result) {
  return result().then(onSuccess, onError);
});
```

You would do something like this:

```javascript
app.wrap('result', function (result) {
  return result().then(function (result) {
    if (result.error) {
      return onError(result.error);
    } else {
      return onSuccess(result);
    }
  });
});
```

The big benefit is that you will always be dealing with a normalized `result` object. E.g. it will have `statusCode`, `headers`, and `body` properties, as well as an *optional* `error` property.