Rework the inventory letter(invlet) assignment system.

Instead of relying on item.invlet to store the preferred letter for an item, we now cache the preferred letter in the inventory.

This commit also fixes several locations in the code where inventory:additem should have been called with keep_invlet = true. This caused a bug where items would appear to have a different letter than they actually had, which only didn't happen often because items tended to keep their assigned invlet.
Make SDL title bar use the right version string.
npc.cpp i18n
iexamine.cpp i18n
event.cpp i18n
add some gettext i missed in monmove.cpp
some more game.cpp gettext
Wrap the last wrappable query_yn() calls with gettext goodness.
disease.cpp i18n for sound effects
Code clean up. Replace sprintf with string_format.
Translate body part names for main display.
Fix errors for lang/json/json_names.py and lang/json/json_snippets.py.
update the .pot file
Advanced inventory: display item autopickup status, toggle with "p"
Use \003 instead of $ to cut string in string_format.
Updated cross-compile instructions to fix missing libintl.h
Fixed realign fence construction
Update veh_interact.cpp

Check cpart for validity before calling can_unmount() with it.
Thanks Rorundo for finding the problem.
Ranged targeting targets last target as last_target no longer
decrements for every monster per turn, due to cleanup_dead cleanup.

So there.
The closest newly spotted monster becomes default 'f' target, unless there's already a target.