WithColor provides a way to change text color temporarily but 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 NestableWithColor, A RAII object like WithColor but it supports
restoring previous colors to handle this "nested" situation:
```
NestableWithColorContext Ctx;
{
NestableWithColor Red(outs(), Ctx, raw_ostream::RED);
Red << "AAA\n";
NestableWithColor (outs(), Ctx, raw_ostream::BLUE) << "BBB\n";
Red << "CCC\n";
}
```
NestableWithColor's destructor restores color states saved in NestableWithColorContext and
prints "CCC" in red.