moved string.Format job into the formatter for WriteWarning extension method

I believe that `string.Format` shouldn't be called directly as `WriteWarning` method receives the message and args parameters. The warning logging could be disabled and `WriteWarning` would end up calling `string.Format` for no good.

I'm also not sure about my implementation here :smile: I used `Tuple` and it felt dirty :smile: 
Isn't it curious that only the WriteWarning that does not take an error is the extension method that has params object[] args? That's probably an oversight... We may need to have many more extension methods added for the different combinations