with_output_color now does all its output at once (via a buffer)

This avoids asynchronous tasks from getting the colors in their output mixed up, and prevents interleaving of `info` and `warn` messages. Fixes #6609 and JuliaLang/IJulia.jl#106

However, `Pkg.update()` output is still a bit annoying for a different reason now: the `INFO` messages don't appear one by one, but rather all at once after all of the packages are updating.  Apparently, something is `yield`-ing before the `info` gets printed, and doesn't return to the `info` task before everything else is done.