Add read ahead logic for streams. (dotnet/corefx#38039)
* Add read ahead logic for streams.
When reading a jaon object or array from a stream into an object we need to TrySkip to ensure that we have all the needed data for the JsonDocument to create a JsonElement. This is only necessary if we haven't already drained the stream.
* Track state correctly
We need to track consumed separately so we can requeue the reader properly after skipping. Add more stream tests.
* Clarify comments and other feedback.
* Fix comment
Commit migrated from https://github.com/dotnet/corefx/commit/
f6b010d2a0bdab94953d519a60d882ff805eea36