code: function compose() {
      var funcs = arguments,
          length = funcs.length;
  
      while (length--) {
        if (!isFunction(funcs[length])) {
          throw new TypeError;
        }
      }
      return function() {
        var args = arguments,
            length = funcs.length;
  
        while (length--) {
          args = [funcs[length].apply(this, args)];
        }
        return args[0];
      };
    }
docs: Creates a function that is the composition of the provided functions,
  where each function consumes the return value of the function that follows.
  For example, composing the functions `f()`, `g()`, and `h()` produces `f(g(h()))`.
  Each function is executed with the `this` binding of the composed function.
  
  @static
  @memberOf _
  @category Functions
  @param {...Function} [func] Functions to compose.
  @returns {Function} Returns the new composed function.
  @example
  
  var realNameMap = {
  'pebbles': 'penelope'
  };
  
  var format = function(name) {
  name = realNameMap[name.toLowerCase()] || name;
  return name.charAt(0).toUpperCase() + name.slice(1).toLowerCase();
  };
  
  var greet = function(formatted) {
  return 'Hiya ' + formatted + '!';
  };
  
  var welcome = _.compose(greet, format);
  welcome('pebbles');
  // => 'Hiya Penelope!'