docs: function flatten(iterable) {
      if (! iterable) return [];
  
      var array = [];
      for (var i = 0; i < iterable.length; i ++) {
        var current = iterable[i];
        if (typeof(current) === 'string') {
          array.push(current);
        } else if (typeof(current) === 'function') {
          array.push(current);
        } else if (Array.isArray(current)) {
          array = array.concat(flatten(current));
        } else if ((typeof(current) === 'object')
                && (typeof(current.length) === 'number')) {
          // JavaScripts' "arguments" is an object, not an array, and on top of
          // that PhantomJS' own implementation is not iterable... Workaround!
          array = array.concat(flatten(current));
        } else {
          throw new EsquireError("Invalid dependency: " + JSON.stringify(current));
        }
      }
      return array;
    }