startBleScan

Starts BLE scanning. Enforces mutual exclusion (cancels any active network scan first). No-op if already scanning or if bleScanner is null.

The finally that clears _isBleScanning is guarded by a generation counter so a stale cancellation from a prior scan cannot reset the flag on this new scan's state.