Implemented as part of ENG-10603
I decided to use std::shared_ptr because on native, we might have multiple SQLiteQueryExecutor objects using one connection - this is because objects are created with thread_local.
This is not great for multithreading, because multiple threads can at the same time modify connectionManager; however, we use a queue and GlobalDBSingleton, which should mitigate.
Also note that this is not worse than it was; in past, multiple threads could also concurrently modify the state of the class, because props were static.
There should be exactly one static std::shared_ptr<NativeSQLiteConnectionManager> connectionManager; per thread_local SQLiteQueryExecutor.
Previously, we were relying on the fact that initializeQueryExecutor is executed first and set the static props of SQLiteQueryExecutor - this is the same, the difference is that it sets the pointer. For web, we set this in constructor
Depends on D14733