Add file stream support for stylized text printing.
This PR adds file stream support to color.h:

```c++
fmt::print(stderr, fmt::emphasis::bold, "bold error");
```

Fixes #944 
{"label": "fmtlib:master", "ref": "master", "sha": "bf1f1c73e39c7ee6581ee0d5bb2471856a14bdb2"}
There are two things lacking which would be great:

* colored print to `stderr` as well as `stdout`
* text style, i.e. print bold

I might be able to do a PR eventually but not at the moment.
Colored print improvements
diff --git a/include/fmt/color.h b/include/fmt/color.h
index 20399210ad23..c5e3016877ed 100644
--- a/include/fmt/color.h
+++ b/include/fmt/color.h
@@ -423,43 +423,67 @@ template <>
 inline void reset_color<wchar_t>(FILE *stream) FMT_NOEXCEPT {
   fputs(internal::data::WRESET_COLOR, stream);
 }
+
+// The following specialiazation disables using std::FILE as a character type,
+// which is needed because or else
+//   fmt::print(stderr, fmt::emphasis::bold, "");
+// would take stderr (a std::FILE *) as the format string.
+template <>
+struct is_string<std::FILE *> : std::false_type {};
+template <>
+struct is_string<const std::FILE *> : std::false_type {};
 } // namespace internal
 
 template <
   typename S, typename Char = typename internal::char_t<S>::type>
-void vprint(const text_style &tf, const S &format,
+void vprint(std::FILE *f, const text_style &ts, const S &format,
             basic_format_args<typename buffer_context<Char>::type> args) {
-  if (tf.has_emphasis()) {
+  if (ts.has_emphasis()) {
     internal::fputs<Char>(
-          internal::make_emphasis<Char>(tf.get_emphasis()), stdout);
+          internal::make_emphasis<Char>(ts.get_emphasis()), f);
   }
-  if (tf.has_foreground()) {
+  if (ts.has_foreground()) {
     internal::fputs<Char>(
-          internal::make_foreground_color<Char>(tf.get_foreground()), stdout);
+          internal::make_foreground_color<Char>(ts.get_foreground()), f);
   }
-  if (tf.has_background()) {
+  if (ts.has_background()) {
     internal::fputs<Char>(
-        internal::make_background_color<Char>(tf.get_background()), stdout);
+        internal::make_background_color<Char>(ts.get_background()), f);
   }
-  vprint(format, args);
-  internal::reset_color<Char>(stdout);
+  vprint(f, format, args);
+  internal::reset_color<Char>(f);
 }
 
 /**
-  Formats a string and prints it to stdout using ANSI escape sequences to
-  specify text formatting.
+  Formats a string and prints it to the specified file stream using ANSI
+  escape sequences to specify text formatting.
   Example:
     fmt::print(fmt::emphasis::bold | fg(fmt::color::red),
                "Elapsed time: {0:.2f} seconds", 1.23);
  */
 template <typename String, typename... Args>
-typename std::enable_if<internal::is_string<String>::value>::type
-print(const text_style &tf, const String &format_str, const Args & ... args) {
+typename std::enable_if<internal::is_string<String>::value>::type print(
+    std::FILE *f, const text_style &ts, const String &format_str,
+    const Args &... args) {
   internal::check_format_string<Args...>(format_str);
   typedef typename internal::char_t<String>::type char_t;
   typedef typename buffer_context<char_t>::type context_t;
   format_arg_store<context_t, Args...> as{args...};
-  vprint(tf, format_str, basic_format_args<context_t>(as));
+  vprint(f, ts, format_str, basic_format_args<context_t>(as));
+}
+
+/**
+  Formats a string and prints it to stdout using ANSI escape sequences to
+  specify text formatting.
+  Example:
+    fmt::print(fmt::emphasis::bold | fg(fmt::color::red),
+               "Elapsed time: {0:.2f} seconds", 1.23);
+ */
+template <typename String, typename... Args>
+typename std::enable_if<internal::is_string<String>::value>::type print(
+    const text_style &ts, const String &format_str,
+    const Args &... args) {
+  return print(stdout, ts, format_str, args...);
 }
 
 #endif

diff --git a/test/format-impl-test.cc b/test/format-impl-test.cc
index c40fe3b51155..9774c33a274c 100644
--- a/test/format-impl-test.cc
+++ b/test/format-impl-test.cc
@@ -228,4 +228,8 @@ TEST(ColorsTest, Colors) {
       stdout,
       fmt::print(fg(fmt::color::blue) | fmt::emphasis::bold, "blue/bold"),
       "\x1b[1m\x1b[38;2;000;000;255mblue/bold\x1b[0m");
+  EXPECT_WRITE(stderr, fmt::print(stderr, fmt::emphasis::bold, "bold error"),
+               "\x1b[1mbold error\x1b[0m");
+  EXPECT_WRITE(stderr, fmt::print(stderr, fg(fmt::color::blue), "blue log"),
+                 "\x1b[38;2;000;000;255mblue log\x1b[0m");
 }

{"format-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "gtest-extra-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "locale-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "posix-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ostream-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ranges-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "assert-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "posix-mock-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "core-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "printf-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "time-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "format-impl-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "custom-formatter-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}}
{"format-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "gtest-extra-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "locale-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "posix-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ostream-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "ranges-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "assert-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "posix-mock-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "core-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "printf-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "time-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "format-impl-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}, "custom-formatter-test": {"run": "PASS", "test": "NONE", "fix": "PASS"}}
{"passed_count": 13, "failed_count": 0, "skipped_count": 0, "passed_tests": ["format-test", "gtest-extra-test", "locale-test", "posix-test", "ostream-test", "ranges-test", "assert-test", "posix-mock-test", "core-test", "printf-test", "time-test", "format-impl-test", "custom-formatter-test"], "failed_tests": [], "skipped_tests": []}
{"passed_count": 0, "failed_count": 0, "skipped_count": 0, "passed_tests": [], "failed_tests": [], "skipped_tests": []}
{"passed_count": 13, "failed_count": 0, "skipped_count": 0, "passed_tests": ["format-test", "gtest-extra-test", "locale-test", "posix-test", "ostream-test", "ranges-test", "assert-test", "posix-mock-test", "core-test", "printf-test", "time-test", "format-impl-test", "custom-formatter-test"], "failed_tests": [], "skipped_tests": []}