FSharp.Compiler.Service: update tagged collections with new implementation from FSharp.Core (#10192)
FSharp.Compiler.Service: update tagged collections with new implementation from FSharp.Core (#10192)

Copied implementation from FSharp.Core

Differences are:

* TaggedCollections used fat leaves (Left/Right/Height present always). There are 2xN objects in the tree, of which N are leaves. Fat leaves give 20 (24 aligned) x N. More memory, worse memory locality, more GC are not good for perf.
* TaggedCollections did not use optimized closures. Not sure if they are useful, but in many cases it's noop if f' was already in the right shape.

Copying the source opens the possibility to move MapTree and SetTree code to separate files and reuse a single implementation in both places.
dsyme/fsharp,dsyme/fsharp,dsyme/fsharp,dsyme/fsharp,dsyme/fsharp,dsyme/fsharp,dsyme/fsharp