function executeStatement(statement, args) {
      var result = statement.apply(this, args);
      if (angular.isFunction(result) || result instanceof angular.scenario.Future)
        return result;
      var self = this;
      var chain = angular.extend({}, result);
      angular.forEach(chain, function(value, name) {
        if (angular.isFunction(value)) {
          chain[name] = function() {
            return executeStatement.call(self, value, arguments);
          };
        } else {
          chain[name] = value;
        }
      });
      return chain;
    }
Defines a new DSL statement. If your factory function returns a Future
it's returned, otherwise the result is assumed to be a map of functions
for chaining. Chained functions are subject to the same rules.

Note: All functions on the chain are bound to the chain scope so values
  set on "this" in your statement function are available in the chained
  functions.

@param {string} name The name of the statement
@param {function()} fn Factory function(), return a function for
 the statement.