code: function compose(middleware){
  	return function *(next){
  		if (!next) next = noop();
  
  		var i = middleware.length;
  
  		while (i--) {
  			next = middleware[i].call(this, next);
  		}
  
  		yield *next;
  	}
  }
docs: Compose `middleware` returning
  a fully valid middleware comprised
  of all those which are passed.
  
  @param {Array} middleware
  @return {Function}
  @api public