In the tree-shaped dirstate we want to have nodes representing files or
directories, where directory nodes contain a map associating "base" names
to child nodes for child files and directories.
Many dirstate operations expect a full path from the repository root, but
re-concatenating string from nested map keys all the time might be expensive.
Instead, WithBasename stores a full path for these operations but
behaves as its base name (last path component) for equality and comparison.
Additionally inclusive_ancestors provides the successive map keys
that are needed when inserting a new dirstate node at a given full path.