Add a process-global `_INITIALIZED_DBS: set[str]` to `features/environment.py`
that caches database URLs after `_fast_init_or_upgrade` has processed them.
On subsequent calls with the same URL, the function returns immediately —
skipping all URL parsing, path extraction, prefix matching, and `stat()`
syscalls that previously executed on every new `UnitOfWork` instance.
The cache is cleared at the start of each scenario in `before_scenario` to
prevent cross-scenario state leaks, since each scenario receives fresh
temp-DB paths via `tempfile.mktemp()`.
Key implementation detail: test step definitions access `_INITIALIZED_DBS`
through `_fast_init_or_upgrade.__globals__` rather than importing from
`features.environment`, because Behave loads environment.py via `exec_file()`
into a private hooks dict — a separate namespace from the Python module.
Four new Behave scenarios validate cache hits on repeated calls, cache
clearing between scenarios, and non-caching of non-matching-prefix URLs.
Estimated savings: ~65,000 unnecessary function-body executions eliminated
per full test run (~7 UnitOfWork instantiations × ~10,700 scenarios).
ISSUES CLOSED: #735