Adds a gun mod to enable wearing a gun. [CR]

Fixes #7214

The last commit does the actual work, the others are there to enable it. The gunmod has a "IS_ARMOR" flag (better name appreciated), the `item::is_armor` function will now look for the item type being `it_armor` *or* the item having that flag. As the `item::has_flag` functions looks for flags in in the used gunmods, it will find the "IS_ARMOR" flag from the new gunmod and the item appears to be armor.

All the code that would refer to members of `it_armor`, has been changed to call item functions, which forward the requested member of `it_armor`, or (if the item type is not `it_armor`) return 0. That way, the contents of `player::worn` can be of any type.

However, the gun has *no* encumbrance or other armor properties because the gunmod does not contain this. This could be either added as separate properties of the gunmod, or calculated based on the items stats (bigger volume -> more encumbrance, maybe more coverage).

Or the gunmod could be changed into an `it_armor` type, with special wrapper code to handle it as gunmod, basically the same as has been done to wrap the members of `it_armor`.

Also: the new item does not spawn and has no recipe and its properties are placeholders (including name/description), I'm not good with those balance / content things, so input is appreciated.
That would work too (and quite good for static data like the container size), but I wanted to avoid / remove the direct access of the item type. Putting that function into the item class gives greater flexibility as the function can examine the item to calculated the return value, instead of relying only on item type data (e.g. encumbrance based on the items volume, including contents). It's also shorter for the caller: `some_item.type->get_storage()` vs `some_item.get_storage()` and the caller does not need to know the `itype` class.