30100 sqlite busy

Address the issues outlined in case 30100:

- Set a timeout of 30s on SQL connections to allow multiple threads to access the database.

- Calling dispose() on a connection from a non-owning thread causes an exception to be thrown, so we remove disposeAllConnections(). Currently it is the responsibility of non-main threads to close connections themselves but this may be mitigated in future as it's not ideal.

Additionally createTempTestingDir() was fixed so that it returns a unique directory per invocation, ensuring a clean test environment every time.