Add timeout message to eventually block
Improve integration test eventually() helper

Callback passed by eventually is now compatible with cucumber callback
syntax (callback() vs callback.fail()) so as to accept request() helper
calls:

  this.eventually(callback, function (next) {
    this.request(null, 'operationName', {}, next);
  });

This code will continue to retry until the above request "succeeds"
(a 200 response). To customize the meaning of "success", you can add
a `condition` function to the `next` callback that executes after the
request completes. This allows you to check for specific values in the
response data before moving on instead of just accepting a successful
request. For example, to wait for DynamoDB tables to be active:

  this.eventually(callback, function (next) {
    next.condition = function() {
      return this.data.Table.TableStatus === 'ACTIVE';
    };

    params = { TableName: world.tableName };
    this.request(null, 'describeTable', params, next);
  });

Because the condition executes after `request`, you have access to the
`data` and `error` properties set by the helper.