Previous code had a bug that if the program exits with an assert()
or fail() before the control reaches end of writeMapFile(), it left
a temporary file, because FileRemover's dtor didn't run.
I could fix that by removeFileOnSignal() and other functions, but
I think we can simply write to the result file directly. I think
that is straightforward and easy to understand.
Additionally, that allows something like -Map /dev/null or a bash
hack such as -Map >(grep -U symbol-im-looking-for). Previously,
that kind of things didn't work.