code: function flatten(tree, options) {
      var settings = _.defaults(options, {
        childNode: ['children']
      });
  
      settings.childNode = _.castArray(settings.childNode);
      var seekStack = [];
  
      var seekDown = function seekDown(tree) {
        tree.forEach(function (branch) {
          seekStack.push(branch);
          settings.childNode.some(function (key) {
            if (branch[key] && _.isArray(branch[key])) seekDown(branch[key]);
          });
        });
      };
  
      seekDown(_.castArray(tree));
      return seekStack;
    }
docs: Return all branches of a tree as a flat array
  The return array with be a depth-first-search i.e. the order of the elements will be deepest traversal at each stage (so don't expact all root keys to be listed first)
  @param {Object|array} tree The tree structure to search (assumed to be a collection)
  @param {Object} [options] Options object passed to parents() finder
  @param {array|string} [options.childNode="children"] Node or nodes to examine to discover the child elements
  @return {Object|array} An array of all elements