Encoded key requests are owned by the caller until they are added to a
key sequence or queued for IO. The child_exited path and failed queue
append returned without freeing the allocated request.
The existing errdefer was also too broad: after queueIo took ownership, a
later setSelection or queueRender error could free the queued request.
We now free requests in the return paths that still own them, and the
errdefer has been removed.
Also, activate a sequence only after encoding and queue append succeed
so failure preserves the previous sequence state.