Buffering improvement and support for unicode.

Bug fixes:
- While buffering and writing to the output stream, if string is chunked
and slices the string pattern that we want to replace in the middle,
then that instance of the pattern will not be replace.
- There was a chance that unicode characters could become corrupt during
the sanitation process if the multi-byte unicode character was sliced
during buffering and chunking.

Improvement:
- Consolidated sanitizer logic into one class, UTF8SanitizerStream.cs