Move some common crafting/construction requirements into a separate struct

The new struct is named requirements and is located in a separate file, construction and recipe inherit from it.

The tool qualities has been moved there, too. The map of known qualities is now stored in a static map inside the quality struct.
Some functions for loading, consistency checking and listing of missing things has been moved into the requirements struct.

This does not yet introduce new feature, but allows constructions to load item qualities.
The member id of quality_requirement has been renamed to type to be consistent with the member of struct component.
As the quality related functions are now part of the quality class, the string "_quality" has been removed from their names as it is redundant.
Move the printing of required tools / components into requirements

Use fold_and_print instead of manually doing this.
Combine special case for the mutation WEB_ROPE and bionic bio_sunglasses for construction and crafting.
Made itype::count_by_charges const, because that's what it should be and it allows to use only a const itype in the requirements.
Move crafting/construction time to requirement class.

Now constructions use the same time scale as crafting, but this is ported to json.
The construction time is converted when loaded from json.
Enhanced the time display to display hours and minutes or seconds (if less than a minute).
Move game::can_make_with_inventory and game::check_enough_materials to requirements class

This allows to use the same logic to check for tools/qualities/components in recipes and in constructions.
This enables tool qualities in constructions.
Harness the power of templates:

Made the three lists of required things in requirements (tools/items/qualities) to equivalent structures (vector of vector of something).
Used template functions to iterate over these lists (with template parameter being that something - tool_comp/item_comp/quality_requirement).

Moved whatever differs into those structures:
- color to be displayed in the the list of requirements - red for not available, gray for other item can be used, green for available, other colors for specials (mutations).
- the name of the something ("welder (40 charges)"/"3 rocks"/"4 tools with sawing quality level 5")
- loading from json (quality uses an json object, tool has simpler format in constructions)
- check for availability (checks mutations, other specials)
- consistency (quality has a different check than item type)
Adding updated RetroDays Tileset

Renames existing RetroDays to more accurate RetroASCII, adds actual
RetroDays Tilesets (10px and 20px versions).
Allow rotation of mall and necropolis
Allow rotation of mall and necropolis...

and added more detail to the mall picture on the overmap.
Ensure MA buffs actually happen

Since the duration gets decremented on the turn you receive the buff, 1
means you never actually get its benefits.
More spacing fixes - martial art books and melee.json.
Brawling & tec_counters

Turns out that tec_counter wasn't implemented, so this creates a generic
version based on biojutsu, and four specialized types for various
styles.

Brawling, the "untrained but experienced" style, now gets some techs at
fairly high levels.  Unfortunately, the leg block is no longer available
to No Style, and arm blocking requires at least one point in Unarmed.
Brawling can leg-block at skill 7.  If that seems high, remember: *no
training or doctrine* to teach how to effectively block with your legs.
Merge pull request #8259 from Rivet-the-Zombie/MA-books-fix

More spacing fixes - martial art books and melee.json.
Toad buff, clean up Brawling

2 armor max didn't seem like much.  Doubled it and modified the rest
accordingly; fixed the Brawling leg block and shortened the description,
too.
Adds brawling to the debug list

Yeah, it's fairly trivial to obtain via the skill debug, but all means
all.
Replace horrific try/catch when loading recipes with explicit check for array vs single element.
RC car proofreading

Cleans up some strings I missed earlier.
Move realDebugmsg debugmsg to debug.{cpp,h}

Make the blood type function the Creature class pure virtual as they
should be and to avoid the debug message there.

And remove the output to a file, instead add output to DebugLog.
astyle debug.h and debug.cpp
Allways call setupDebug from main and let that function figure out if it's enabled at all.

Moved includes to the top of the file.

Added some comments and documentation.

Added explicit deinitializing of the debug system.

Debug messages of the level D_ERROR or of the class D_MAIN (those
originate from realDebugmsg) are always logged.

Setup different default debug levels based on debug/release build.

remove the check for ENABLE_LOGGING, logging is always enabled.
Add SDL as debug class and add proper debug levels to DebugLog in sdltiles.cpp

Omit the newline at the end of a debug message. The debug stream will
add it on its own.
Apply formatting: space behind '(' and before ')'.
The macro dbg automatically adds the cpp file and line, adding the function name to the debug message is not needed.
Also removed some pointless calls to std::string::c_str, the debug stream can handle std::string just fine.