code: function _createIntermediateDirectories(treeData, path) {
          var objectPath = [],
              result = {
                  objectPath: objectPath,
                  treeData: treeData
              },
              treePointer = treeData;
  
          if (path === "") {
              return result;
          }
  
          var parts = path.split("/"),
              part = parts.shift(),
              node;
  
          while (part) {
              if (treePointer === null) {
                  return null;
              }
              node = treePointer.get(part);
              objectPath.push(part);
  
              // This directory is missing, so create it.
              if (node === undefined) {
                  treeData = treeData.updateIn(objectPath, _createNotFullyLoadedDirectory);
                  node = treeData.getIn(objectPath);
              }
  
              part = parts.shift();
              if (part) {
                  treePointer = node.get("children");
  
                  if (treePointer) {
                      objectPath.push("children");
                  } else {
  
                      // The directory is there, but the directory hasn't been loaded.
                      // Update the directory to be a `notFullyLoaded` directory.
                      treeData = treeData.updateIn(objectPath, _createNotFullyLoadedDirectory);
                      objectPath.push("children");
                      treePointer = treeData.getIn(objectPath);
                  }
              }
          }
  
          result.treeData = treeData;
          return result;
      }
docs: @private
  
  Creates the directories necessary to display the given path, even if those directories
  do not yet exist in the tree and have not been loaded.
  
  @param {Immutable.Map} treeData
  @param {string} path Path to the final directory to be added in the tree
  @return {{treeData: Immutable.Map, objectPath: Array.<string>}} updated treeData and object path to the created object