[libc] Add v variants of printf functions

The v variants of the printf functions take their variadic arguments as
a va_list instead of as individual arguments. They are otherwise
identical to the corresponding printf variants. This patch adds them
(vprintf, vfprintf, vsprintf, and vsnprintf) as well as tests.

Reviewed By: phosek

Differential Revision: https://reviews.llvm.org/D157138
diff --git a/libc/src/stdio/vfprintf.h b/libc/src/stdio/vfprintf.h
new file mode 100644
index 0000000..b4a2d5e
--- /dev/null
+++ b/libc/src/stdio/vfprintf.h
@@ -0,0 +1,22 @@
+//===-- Implementation header of vfprintf -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_LIBC_SRC_STDIO_VFPRINTF_H
+#define LLVM_LIBC_SRC_STDIO_VFPRINTF_H
+
+#include <stdarg.h>
+#include <stdio.h>
+
+namespace __llvm_libc {
+
+int vfprintf(::FILE *__restrict stream, const char *__restrict format,
+             va_list vlist);
+
+} // namespace __llvm_libc
+
+#endif // LLVM_LIBC_SRC_STDIO_VFPRINTF_H