Implemented as part of [ENG-10603](https://linear.app/comm/issue/ENG-10603/biggest-risk-factor-out-code-from-databasequeryexecutor).
Currently, we have:
1. `SQLiteConnectionManager` that is used on the web
2. `NativeSQLiteConnectionManager` that is inheriting from the class `SQLiteConnectionManager` and overrides a couple of methods to be native-specific.
3. `SQLiteQueryExecutor` that owns `*connectionManager` and uses it, but connection management is implemented in multiple places.
This diff changes the approach to the following:
1. `SQLiteConnectionManager` will be an abstract class with pure virtual functions that depend on the platform (this way, we can avoid directives in `SQLiteQueryExecutor` and put platform-specific implementation into dedicated classes). Shared code will be implemented in this, parent class
2. `NativeSQLiteConnectionManager` that is inheriting from the class `SQLiteConnectionManager` and overrides native-specific methods.
3. `WebSQLiteConnectionManager` that is inheriting from the class `SQLiteConnectionManager` and overrides web-specific methods.
4. `SQLiteQueryExecutor` that owns `*connectionManager` instance based on platform, but connection management will be fully moved to `*connectionManager` (later in the stack)
Depends on D14573