This patch implements the variadic lock_guard paper.
Making lock_guard variadic is a ABI breaking change because the specialization lock_guard<_Mutex> mangles differently then when it was the primary template. This change only provides variadic lock_guard in ABI V2 or when _LIBCPP_ABI_VARIADIC_LOCK_GUARD is defined.
Note that in ABI V2 lock_guard must always be declared as a variadic template, even in C++03, in order to keep the ABI consistent. For this reason lock_guard is forward declared as a variadic template in all standard dialects and therefore depends on variadic templates being provided as an extension in C++03. All supported versions of Clang and GCC provide this extension.
You need to update the synopsis at the top of the file.