https://julesjacobs.com/2014/11/11/immutable-vectors-csharp....
His implementation uses buffers of capacity 32, generics, and bit shifting to do lookups.