In BsonReader, replace:
ReadName<TValue>(BsonTrie<TValue> trie, out bool found, out TValue value)
with:
ReadName(INameDecoder nameDecoder)
and externalize the Trie-based name decoding that is currently in BsonBinaryReader into a separate TrieNameDecoder class.
While this is technically a breaking change, we don't expect that any applications are actually calling the ReadName overload that we are removing.