fix: address code review feedback on frame-based architecture
- Important Issue 1: Add guard in ALLOC_SHARED to prevent self-referential act_id (lane leak)
- Added check before parent lookup to reject tokens with act_id already in tag_store
- Added test_alloc_shared_self_referential_guard() to verify TokenRejected is emitted
- Important Issue 2: Add codegen initial_tag_store tuple assertion
- Added assertions in test_alloc_tokens_per_activation() to verify all tuple values
- Prevents regression to int values in future codegen changes
- Important Issue 3: Add REPL tag_store formatting assertion
- Added assertion in test_pe_after_load() to verify 'lane' in output or empty marker
- Ensures formatting includes lane information
- Minor Issue 1: Extract _smart_free helper to deduplicate FREE logic
- New method _smart_free() handles shared FREE logic for all three paths
- Reduces code duplication in _handle_frame_control() FREE/FREE_LANE and _process_token() FREE_FRAME
- Helper correctly handles frame-in-use case and emits appropriate FrameFreed events
- Minor Issue 2: Guard ALLOC_REMOTE against None slot values
- Added check for None before reading target_pe and target_act
- Logs warning and returns early if slots contain None
- Minor Issue 3: Add warnings for FREE_LANE/FREE/FREE_FRAME with invalid act_id
- Added else clauses with logger.warning for unknown act_ids in all FREE paths
- Consistent with other error handling in PE