New implementation of rebasing.

Supports rebasing a file to nothing: If the new base is blank,
the path is deleted from the analysis cache file. This is useful
for getting rid of JVM dependency info, which isn't portable and
can be unnecessary in practice, since people switch JVMs infrequently.

Uses partial functions, so we can distinguish between "I don't
match this path" and "I do match this path, and want to rebase it
to nothingness". This is a more elegant approach, since rebasings
are in fact just partial functions on the domain of paths.