Cleanups.
Fix the redirect logic.

On Windows:
301+302 redirects as GET if we have a body, either by setting the "Body"
property, using TransferMode.ContentLength or RequestFlags.ExplicitlySetLength
(which will always add a Content-Length: header).

It redirects as POST when the body is either null or empty and no Content-Length:
header has been specified.  This is a violation of the HTTP spec.

On Mono:
We follow the HTTP spec and always redirect 301+202 as GET.
Check whether we're actually sending the correct body.
Add test for bug #18750, which I cannot reproduce.