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 12586 - redundant error messages for tuple index exceeding
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