Add Utf8JsonWriter along with unit tests (dotnet/corefx#34425)
* Move JsonReader related files to the Reader directory.
* Update S.T.Json ref to include new JsonWriter APIs.
* Port initial JsonWriter files from corefxlab.
* Auto-generate System.Text.Json ref to update the ordering for
consistency.
* Fixed some TODOs, delete dead code, and formatting cleanup.
* Make use of self-descriptive constants where possible.
* Fix leftover TODOs and update throw helper/exception messages.
* Add xml comments/docs to the public surface area.
* Add JsonWriter unit tests.
* Change GetCurrentState back to a property and explicitly Flush on the
callers behalf instead of throwing.
* Save current depth as part of state and update tests.
* Fix constant names, account for quotes in bytes needed, and add fixed buffer writer tests.
* Fix inconsistent use of braces by adding them for single line ifs
* Update parameter name to exclude encoding.
* Remove JsonWriterException and use InvalidOperationException instead.
* Use Rune and Utf8Formatter/TryFormat in more places and remove
UnicodeScalar.
* Fix nits, typos, and reorder field assignment and method calls.
* Pass spans by in (or by value) instead of by ref.
* Update comments and remove unnecessary test.
* Remove some aggressive inlining and pass spans by value rather than in
* Update comments, dont compute bytes needed, and use if instead of loop before advancing.
* Reduce code bloat by removing duplciate calls to ValidateX.
* Add details on how .NET types are formatted to comments.
* Reduce code duplication when writing values.
* Change the StandardFormat used for DateTime(Offset) to 'O'
* Refactor calculating the maximum escaped length to a helper.
* Remove unnecessary checks and rename locals to be more descriptive.
* Rename suppressEscaping to escape and flip default from false to true.
* Comment cleanup, add debug.asserts, and move transcoding helpers to a
separate file.
* Increase the deicmal max size to account for sign and add tests.
* Rename ROS<byte> property name and value params to include utf8 in the
name.
* Remove redundant code where idx is set to 0 unnecessarily.
* Remove dead code (dont escape forward slash) and make tests culture
invariant.
Commit migrated from https://github.com/dotnet/corefx/commit/
f84927d4a85444e63ede2da38a49eff7116790db