Add --graft functionality to bup index

This patch adds the --graft command line option to bup index. This
allows an index to be constructed which maps multiple absolute path
names to specific names within the bup archive (when used in conjunction
with bup save). It also allows path name mappings to be redefined during
updates, or for path names to be remapped to arbitrary locations to
accomodate backups from sources with architectural differences such as
between Windows and Linux.

Signed-off-by: Will Rouesnel <w.rouesnel@gmail.com>
upstream/master merge fix up.

Fix missed items during the big merge/rebase.
path_components() graft-index aware splitting.
Add hold property to index.Entry objects

Hold property is a transient property to be set during update_index() to
avoid grafted paths from causing unexpected deletion notifications
during index update steps.

It is calculated and not written to the index.

Signed-off-by: Will Rouesnel <w.rouesnel@gmail.com>
Change index-cmd.py function to allow for grafted indexing

Redesign update-index() function to accept the list of paths and iterate
over them in one step. This allows the index to retain memory
consistency between update steps and prevents grafted index paths from
different roots as marking files for deletion.

The practical consequence is that grafted-indexes allow paths and files
to be merged.

Signed-off-by: Will Rouesnel <w.rouesnel@gmail.com>
Extra logging for grafted paths in index-cmd

index-cmd now prints the same verbose logging information about grafted
file paths as save-cmd.

The log file outputs as follows:

real path => bup archive path

Signed-off-by: Will Rouesnel <w.rouesnel@gmail.com>