[SV 40361] Don't use vsnprintf(), which is an ISO C99 function.

* output.c (error, fatal, message): Take an extra argument specifying
how many bytes are used by the formatted arguments.
(get_buffer): New function that allocates the requested buffer size.
Remove msc_vsnprintf(), vfmtconcat(), and fmtconcat() as unneeded.
* makeint.h: Declare various helper macros for generating output.
* *.c: Change all error(), fatal(), message() calls to use the macros,
or pass the extra length argument directly.
* load.c: [SV 40515] Define RTLD_GLOBAL if not set.

Copyright-paperwork-exempt: yes
[SV 40226] Add a new type of switch: single-string options

* main.c (struct command_switch): Change the "string" types to "strlist"
and make "string" be a single-valued string instead.
(output_sync_option, jobserver_fds, sync_mutex): Change to string type.
(decode_output_sync_flags): Handle single strings instead of lists.
(prepare_mutex_handle_string): Ditto.
(main): Ditto.
(clean_jobserver): Ditto.
(init_switches): Handle the new type.
(decode_switches): Ditto.
(define_makeflags): Ditto.
Fix memory leak during environment option decoding.

* main.c (decode_switches): Always make a copy of option arguments.
(decode_env_switches): Use a stack buffer to convert environment
switches for parsing.
* read.c (unescape_char): Use memmove() for overlapping memory.
* load.c (load_file): Reset the name length minus the symbol.
* features/loadapi (test_expand): Allocate memory for the nul byte.
Solve some Windows build issues.

* main.c (main): Use ONS(), not OSN().
(prepare_mutex_handle_string) [WINDOWS32]: Use %Ix formatting to
support both 32bit and 64bit systems.
* job.c (free_child, new_job): Use ONS(), not OSN().
* w32/subproc/w32err.c (map_windws32_error_to_string): Use O() when
calling fatal().

Copyright-paperwork-exempt: yes
* main.c (decode_env_switches): Ensure we have enough space.

Reported (with patch) by Gerte Hoogewerf <g.hoogewerf@gmail.com>
* w32/*: Remove TABs from the source code.

I know whitespace commits are annoying, but having these TABs is
causing me to miss things when I search through the code.  This
doesn't try to change the w32 code to meet GNU coding standards.