Added `debuggable` flag to `AbstractLinkTask` and changed the C++ and Swift plugins to set this to `true` for the debug variants of each library, executable and test suite. Changed the Visual C++ toolchain to understand this flag and add the appropriate linker arguments.
Changed the C++ and Swift plugins so that by default debuggable binaries are built for the debug variant, and non-debuggable optimized binaries are built for the release variant. Added `debuggable` and `optimized` flags to `AbstractNativeCompileTask` and changed the tool chain implementation to generate the relevant compiler options. The C++ and Swift plugins set these flags on the compile tasks.
Also changed `AbstractNativeCompileTask` and `AbstractLinkTask` task types to provide default values for compiler args and macros (both empty) rather than forcing build logic to always set these.