WithColor provides a way to change text color temporarily but currently it resets colors in
the destructor regardless of the previous color. Consider this example:
```
{
WithColor Red(outs(), raw_ostream::RED);
Red << "AAA\n";
WithColor(outs(), raw_ostream::BLUE) << "BBB\n";
Red << "CCC\n";
}
```
In this example "CCC" is not colored with red because the WithColor instance for
the blue color resets the color in its destructor.
This patch adds WithColorContext, A object which stores color states and it allows
WithColor to restore previous colors:
```
WithColorContext Ctx;
{
WithColor Red(outs(), raw_ostream::RED, false, false, false, &Ctx);
Red << "AAA\n";
WithColor(outs(), raw_ostream::BLUE, false, false, false, &Ctx) << "BBB\n";
Red << "CCC\n";
}
```
With WithColorContext, WithColor's destructor restores color states and prints "CCC" in red.