Define variadic macros for use throughout the code base

Variadic macros can be a productivity boost by not having to think about which macro to use only to change it later when you realize you want an extra string argument...if you remember. And it's not always easy to catch when you don't remember.

This also includes a few supporting changes to libs like wcautil, where I copy the `va_list` and iterate through a copy to determine the number of arguments automatically while maintaining backward compatibility.