Tweak ImmutableDictionary.TryGetValue to improve throughput (dotnet/corefx#35759)
* Avoid recursive calls in SortedInt32KeyNode.Search
* Compare first key directly in HashBucket
* Seal a few internal types that have virtual overrides or interface implementations
* Avoid extra level of indirection with Search
Now that it's no longer recursive, we can just inline it and build the caller's decisions right into it.
Commit migrated from https://github.com/dotnet/corefx/commit/
8c54cd84f98c553b75356c69d2c8f5a4029717bc