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.
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.
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.
SDL: check results of SDL functions for errors and report them.

Added the fontlist path to the debug output so the user knows where to look.

Removed SDL_Init(SDL_INIT_AUDIO) as the AUDIO flag is included in the first call of SDL_Init.
Removed the error logging that InitSDL or WinCreate failed. Both function already log the error when they return false.

Added error reporting during loading of tileset, done by throwing.

Made several functions that load tiles report their errors by throwing std::string.
Delegate some of that to the Json class (when the json data is invalid).
Add some documentation about what's thrown.
cata_tiles::reinit: call init after clearing instead of duplicating its code.
options.cpp: reinit tiles from the same folder as it was initialized in sdltiles.cpp during start.
Shifted the include into the main part, no need to include the file if tiles are not enabled at all.

Added reporting of SDL errors in cata_tiles with DebugLog.

All errors are logged, but do not throw, throwing is only done during loading of the tileset.
Also erase a compiler warning about missing switch-case.
Make sure loading color data in SDL reports errors

Use a global std::array to store the required color names as they have to be present in the json data.
Let the JsonIn object do the input checking (check for object when object is requested, ...).
Catch any errors from json loading and write them to the debug log.
Use loops instead of explicitly listing.
Macros are bad, transformed ccolor into a function.
Several checks for accessing map contents etc.
Applied astyle
Added some documentation.

The whole color loading code is duplicated (with only minor differences) in wincurse.cpp