Track modules in the symbol map.

This makes it so things don't overlap confusingly, and also so that we can
replace funcs more correctly and sanely.

This is unfortunately a bunch more complicated...
Write symbol maps as ".ppmap" instead.

This has some benefits:
 * They are smaller, but zgrep/zcat etc. still work.
 * Since the format is slightly different, bisecting won't overwrite.
 * It avoids conflicts with .map file associations.
Avoid returning points from the symbol map.

Now that it uses a lookup, this is even more dangerous.  But, the maps
could be reordered while it's trying to print the pointer and cause that
data to become invalid.

This should be safe from race conditions.
Fix possible module index overlap.
Oops, missed a c_str() conversion.
Merge pull request #5221 from unknownbrackets/debugger

Add module info to the symbol maps