MetadataService: refactor SaveHttpStream() with 'using' pattern

This method was extremely convoluted because it was checking
for nulls every time and calling Close() only in the proper
situations.

By employing the "using" pattern, we can achieve the same with
less checks and less explicit calls to Close(), as this pattern
checks for null before disposing, and the Dispose() methods of
both HttpWebResponse and Stream call Close() underneath.

The code becomes much more readable this way. (And this is also
safer against resource leaks because the calls to Dispose()
happen in a finally{} block.)