When class instances stored in reactive state have methods that modify
internal state, each modification triggered a separate debounced notification.
This caused performance issues when many modifications happened rapidly.
The fix uses a single Map to track notification state per key:
- Pending timeout: notification scheduled but not yet fired
- "executing": observers currently running (skip new notifications)
This ensures multiple notify() calls for the same key are coalesced into
a single observer execution, preventing OOM and UI freezes.