Build using implicit rules with pattern matching

This change declares four implicit rules for building each of the set of
objects (DMD_OBJS, ROOT_OBJS, GLUE_OBJS and BACK_OBJS). It should make
it easier to add/change/control the compiler flags for the different set
of source files. Especially adding and changing warnings-flags being
used.

The difference against master (db2291f) on the object files only differs
(using md5sum) because of different content in 'verstr.h' which affects
'mars.c', and because 'strtold.c' is now compiled with flags and is
affected by optimization.
Add set of warning flags

Initally disabled keeping the old warning flags. Defining
ENABLE_WARNINGS turns them on. Flags suggested by Nordlöw in forum
thread: "Recommendation: Compile DMD with More Warnings"
Clean up compiler flag handling

All source files have a common set of build flags and those should be
put in CFLAGS, for example warnings, optimization level, and possibly
profiling flags if required.

Introduces four specific flags for the different object file sets to
keep some diversity if necessary. (This could be removed if the small
differences are insignificant).

Introduces ENABLE_DEBUG (same as DEBUG) and ENABLE_PROFILING to turn on
debugging and profile flags. ENABLE_PROFILING turns on previously
commented PROFILE and COV variables. Content is the same.
Alter implicit pattern rule to not require vpath to ROOT

Object async.o was DMD_OBJS, should have been in ROOT_OBJS.
Correct warning flags
fix Issue 12574 - [ICE](statement.c, line 713) with reduce with wrong tuple arity

Make `TemplateInstance::semanticTiargs` reentrant against semantic errors.
[Refactoring] Make long member function names short
[Refactoring] Add detailed comment
start on @nogc
fix Issue 12581 - [ICE](statement.c, line 713) with invalid assignment + alias this

Make AssignExp::semantic reentrant for `op_overload` call.

-----

If an expression supports operator overloading, its `semantic` function should not store error expressions in itself until the point of `op_olverload` call (from [a] to [b]).

Example:

Expression *XXXExp::semantic(Scope sc)
{
  // [a]
    ...
    e1 = e1->semantic(sc);  // Bad: if semantic analysis returns ErrorExp,
                            // it is stored in this->e1 immediately.
    if (e1->op == TOKerror)
        return e1;

  // [b]
    Expression *e = op_overload(sc);
    if (e)
        return e;
    ...
}

If `XXXExp::semantic` is called from the `trySemantic` call for `alias this` analysis (from `op_overload` function in `opover.c`), the stored ErrorExp would accidentally escape from the gagged period.
fix Issue 12571 - __traits(parent) should work for typed manifest constant in initializer
Merge pull request #3456 from 9rnsr/fix12571

Issue 12571 - __traits(parent) should work for typed manifest constant in initializer
fix Issue 12524 - wrong type with inout const arg and inout return
Merge pull request #3457 from 9rnsr/fix12524

Issue 12524 - wrong type with inout const arg and inout return
Merge pull request #3454 from 9rnsr/fix12501

[REG2.066a] Issue 12574 - [ICE](statement.c, line 713) with reduce with wrong tuple arity
fix Issue 12586 - redundant error messages for tuple index exceeding
fix Issue 8373 - IFTI fails on overloading of function vs non function template
Merge pull request #3458 from 9rnsr/fix12586

Issue 12586 - redundant error messages for tuple index exceeding
Merge pull request #3440 from andron/implicit-build-rules

Build using implicit rules with pattern matching
Fixed offsets in comments for enum TOK