Add gun data entry to auxiliary gunmods to make them proper guns.

Someone needs to replace the placeholder data!

Remove the islot_gunmod::mod_dispersion, it was loaded from the json member "dispersion" which is now a member of the gun data and is now loaded through the gun data slot.
clip_size_modifier, range and ammo_modifier are both optional in gunmods and therefor removed, but added to the gun data where at least the ammo and the clip size are mandatory.
Disallow firing gunmods as single item (not attached to a gun).

And add a line about this restriction to the item infos.
Rename gun item functions to have gun_ prefix:

item::recoil to item::gun_recoil

For consistency with other gun functions and for clarification and distinction from functions applying to other item types.
Make item::range fit for gunmods:

Use the guns/gunmods range as base, than add range from ammo.

Make the player parameter mandatory (but it can still be null) and const.

Extract some logic for gun range calculation into separte function, similiar to the other gun related functions.
It allows gunmods to affect the range (positively or negatively).
Note that gunmod and gun data are separate, auxiliary gunmods can affect the range of the base gun.
Move handling of charge gun into the item class:

Store the flag that indicates such a weapon into a separate constant.

All references to that kind of item should now be in the item class.
Implement item::gun_skill to get skill sued by a gun.

This differs from item::skill (previously used in ranged.cpp) as it returns the gun skill, not any skill from books or gunmods.
Item info shows data of active gunmod.

The gun section of the info shows the data taken from the active gunmod (if any), or (no active gunmod) from the gun itself.
This allows the player to see the actual values that are used to fire.