feat: ALLOC_REMOTE reads fref+2 for data-driven ALLOC_SHARED
Task 1 Phase 4a Subcomponent A:
Updated ALLOC_REMOTE handler in emu/pe.py to read fref+2 from frame constants
and conditionally emit ALLOC_SHARED vs ALLOC based on whether parent_act_id
is non-zero.
Implementation details:
- Read fref+0 (target PE), fref+1 (target act_id), and new fref+2 (parent act_id)
- If parent_act (fref+2) is non-zero: emit FrameControlToken with op=ALLOC_SHARED and payload=parent_act
- If parent_act is zero/None: emit op=ALLOC and payload=0 (backwards compatible)
- Frame slots at fref+0, fref+1, fref+2 are assumed to be int values per codegen contract
- No runtime type checking added (consistent with existing ALLOC_REMOTE pattern)
Accepts AC4.1 (data-driven shared allocation) and AC4.2 (no new opcodes).
All 1290 tests pass. Backwards compatibility verified: existing tests with
only fref+0/fref+1 populated default fref+2 to None/0 (falsy), so they
emit op=ALLOC as before.