Add wrapping to player::use_charges and player::charges_of for "UPS"

The wrapping interprets a request for charges from itype:
- "UPS" as request for "UPS_on" and "UPS_off" (meaning both item are considered),
- "UPS_on" as (additionally) request for "adv_UPS_on" (both "UPS_on" and "adv_UPS_on" are considered) and as request for active bionic "bio_ups".
- similar for "UPS_off" and "adv_UPS_off" and for bionic "bio_ups" (active or not).

Adds player::has_active_UPS to check for any kind of active UPS (adv./normal/bionic)

Use generalized UPS charges for most stuff that requires UPS charges and use has_active_UPS for for stuff that needs a UPS.

Makes the has_(amount|charges) and (amount|charges)_of const
Move the removal of item mods into functions

The code was repeated several times, that's not good.
Use player::i_add_or_drop instead of dropping the removed mods.
Use item::tname for the name of the modded item.

Also check for the mod in the item_tags, not via item::has_flag as that function looks into the flags of the item type first. We should not change the item type, so we have to modify only item where the mod is used on the item, not on the type.
Enhance UPS mod usage:

Charge items in players possession (if they are modified to use the UPS) to their minimal usable charges.
Disallow the UPS mod on the UPS items itself.
When the item has the flag CHARGEDIM (flashlight), ignore it when used with a UPS mod. This makes the item appear fully charged and emit the full light.
Port remaining parts of npc code to item position system.

Use the item position instead of the invlet of the item,
or (in case of trading which removes several items at once) use the item pointer instead of the invlet.
Apply the item position system to the remaining places.

Use item position instead of invlet everywhere.

The only functions in the player class still using invlets is invlet_to_position.
It return the item position of the item with the given invlet. It is only for the user interface, internally everything uses the item position.
Code that used the invlet with other functions (i_at(char), has_item(char)) will now get the item position and than use that value.

game::drop: use the item-vector as parameter to store the taken off armor. Than drop the items from that vector. This does not require any invlet information at all.

game::unload: don't assign an invlet directly, let the inventory class handle it.

Pickup::pick_up: don't assign an invlet, let the inventory class handle it. Auto-wielding still assigns an invlet.

Rename inventory::position_by_letter to invlet_to_position to be consistent with the function of the same purpose in class player.

Added debug message to player::position_by_letter when called on a npc, npcs should not use the invlet system at all.
Replace add_item_by_type by proper item creation

And add the item by player::i_add instead of putting it into the inventory directly.
Fix naming of the heavy crossbow.

The only source for the name "Ganz-Rustung" are a few posts in
<http://thearbalistguild.forumotion.com/t22p30-medieval-crossbows-photos-drawings-diagrams>.
I talked to the contributor (?) of the heavy crossbow and this thread was
their source. As a German with some exposure to the middle age reenactor
scene, I have never ever heard of a crossbow referred to as "Rüstung",
it is in this context purely a term for armor. Most likely the source of
the name visited a museum and confused the labels on two showcases.
Merge remote-tracking branches 'dda/pr/8283', 'dda/pr/8301' and 'dda/pr/8302' into dda-master

* dda/pr/8283:
  Enhance UPS mod usage:
  Move the removal of item mods into functions
  Add wrapping to player::use_charges and player::charges_of for "UPS"

* dda/pr/8301:
  Replace add_item_by_type by proper item creation
  Apply the item position system to the remaining places.
  Port remaining parts of npc code to item position system.

* dda/pr/8302:
  Fix naming of the heavy crossbow.
Iterate over worn items and weapon when handling UPS charging too.