Async-ify the remaining WebConnectionStream pieces.
[System]: Split WebClient.UploadData() data into chunks and fire the event.

This is mostly cosmetic and won't help unless you're sending a very large
buffer due to the kernel's internal buffering.  Unfortunately, there is no
way of getting a notification when the data has actually been sent over the
wire - socket.Write() returns after the kernel has accepted the data.
[Sys.Xml]: Allow XElement to be deserialized; fixes #12571.