CreateCodedInput is created from the underlying array behind the ByteString.
If this was created from a larger array (via Memory<byte> or ArrayPool etc)
then the CodedInput refers to the wrong section of memory.
Change is to add the offset and count like the other methods that use the
ArraySegment (ToString, ToBase64, WriteTo).
* Add more testing for ReadOnlySpan parsing
* Update `AssertReadFromParseContext` to also run assertions for a
`ParseContext` initialized from a `ReadOnlySpan` of the given input.
* Remove passing `ReadOnlySpan` parameters by ref since they are not
altered and the type isn't large enough to benefit from performance
improvements for passing by `ref` or `in`
* Update `ParseContext` `Initialize` overloads for
`ReadOnlySpan<byte>`, going down to two (since nothing was calling the
overload that changed the recursion limit). The first now calls the
second to set the `buffer` and `state` on the context, and has
documentation to note that it is used to create a `ParserInternalState`
with default settings.
* Move additional `ReadOnlySpan<byte>` `ParseContext` overloads next to
the existing overload
* Pass `ReadOnlySpan<byte>` parameters by `ref`
* Update `MessageParsingHelpers` to add checks for parsing from
`ReadOnlySpan<byte>`, remove tests from `CodedInputStreamTest`
This is important when parsing descriptor sets that contain extensions.
(The alternative is to get the descriptor bytes again for individual
elements, e.g. message descriptors, and reparse them with the
appropriate extensions. It's really ugly.)