Fix display of multi-column menu selection message

NetHack4 shows which item of a menu was selected in the previous message
window and message window, but multi-column menus use raw tabs to split
entries that are meant to appear in different columns, and these tabs
confuse both the message window line-length logic and the previous
message window width.

Display of selections from multi-column windows still looks a bit odd
because some code that uses menus do manual padding with spaces, but at
least now they don't cause outright display glitches.

This bug also exists in NetHack4.
NH4:Compress binary data in logs if it saves space

The NetHack4 save diff logging system is pretty data-hungry: without
this compression it comes in at about 1 MB per 1000 turns.  With
compression, it's half that (500 KB per 1000 turns), which is still a
fair bit.  It's still really useful for recovery and debugging.

Compression adds zlib as a new dependency for the game.

Compress binary blobs in the savefiles if it saves space
Alex Smith <ais523@bham.ac.uk>
e2fcf826e2ab31bf60520c9a33e7eaaf50dec328
NH4: Don't load whole save files during replays

Before this, NitroHack would load the entire save log into memory to
split it into tokens when showing a replay.  The new save diff logging
from NetHack4 adds the new diff log entry type, which are large compared
to other types even with compression; I think this is why NetHack4
replaces this tokenization scheme with more direct file access seen in
this commit.

From NetHack4:

"This is half of what's necessary to make loading saved games much
faster.  (The other half is not scanning the entire file for options.)
Hopefully eventually, only the bits of the save file that are actually
relevant will ever be read."

With this change, the max action count in a replay must be stored in the
log header, replacing the string "NitroHack" ("NetHack4").  This needs
to be updated in log_command_result() which lives in log.c, but can only
be initialized properly when the log header is read: replay_begin() in
logreplay.c in this case.  NetHack4 and hence this code transports this
with the action_count global variable (yuck).  For future improvement,
I'd suggest altering replay_read_newgame() to grab this count since it
already reads the log header, and allowing the recently-added log_init()
function to accept the max action count so far, allowing action_count to
at least be static to log.c.

Don't store save files in memory during replays
Alex Smith <ais523@bham.ac.uk>
6b080354292807f249587fa4b7ab3b0bec650620
NH4: Greatly speed up recover/replay from diffs

Save diff handling in replays can run in fast mode, resolving all diffs
without restoring the game until needed using replay_sync_save().

Compared to NetHack4, this once again preserves the experimental port
of UnNetHack's tutorial mode and adds a note in the comments of
true_moves() about why it restores data it doesn't seem to use (it needs
to reach moves in the diff_base memfile).

Greatly speed up recover and replay from diffs
Alex Smith <ais523@bham.ac.uk>
b71619b69581f4943346e2175f66d56d11b9a99d
NH4: Show the file offset when a save is corrupted

This makes it easier to recover.

Show the file offset when a save is corrupted
Alex Smith <ais523@nethack4.org>
e6bf4a4e7a6f2ee266f28c12af324136a85212ab
Cygwin: Note libmpfr4 dependency for gcc4

At some point in the past, the libmpfr4 dependency for gcc4 was botched
by its maintainer, but they found and fixed it.  However, some Cygwin
package repositories still miss it, so this commit adds a note to the
Cygwin build instructions to ensure it's there before proceeding.

Fixes issue #73 on GitHub.
Make sparkle option a number for animation speed

The sparkle option is now a number from 0 to 21 inclusive: 0 disables
the animation, 1 is the normal NetHack speed, 2 is double, etc. and 21
shows a single frame for a fraction of a second.  Based on the
sparkle_speed option from K-Mod.

flags.sparkle was changed from a boolean to a char, so it already has an
mwrite8() in save_flags() and an mread8() in restore_flags(); keep this
in mind if basing a patch off of this.
NH4: Add paranoid_lava and paranoid_water options

If either is set to true (default for both), the game will stop the
player from walking into lava and water respectively.

Compared to NetHack4, this adds options to control this automation,
shows more laconic messages, only shows the m-direction tip if the
verbose option is set (it usually is anyway) and breaks up the
uber-condition in the code into simpler series of checks.

Require m-direction to move into water or lava
Alex Smith <ais523@bham.ac.uk>
eadc0ef01afbf60c808819d4a97915948e8739e2
NH4: Track knowledge of door locked/trapped status

Doors known to be trapped are colored cyan, locked red and unlocked
green in that priority.  This can be toggled with the existing mapcolors
option.

Note that the system will never remember door locked/trapped status
incorrectly, only whether the player should know it or not.

Compared to NetHack4, mem_door_l and mem_door_t aren't packed into
mem_bg, instead getting their own bits that I'd reserved when I
implemented mapcolors.  The case when door opening resists no longer
exists in UnNetHack, so the lock/trap bits aren't set in that case.  The
NetHack4 commit alters the argument list of dbuf_set() to accomplish all
of this, whereas this code does all the hard work inside dbuf_set()
itself, side-stepping a lot of boilerplate code in the many places that
it's called.  The NetHack4 commit also includes code for highlighting
peaceful monsters, which will be included in this development branch in
the future.

Track player's knowledge of locked/unlocked doors, draw it onscreen
Alex Smith <ais523@bham.ac.uk>
599c3d156cdb89239ec9b317bb2832290c00d34f