fix: add rq_enqueue on wake in keyboard, tty, pty drivers
keyboard.c, tty.c, pty.c all transition processes from BLOCKED to
READY without enqueuing them into the O(1) scheduler runqueue.
This causes woken processes to be invisible to rq_pick_next(),
leading to starvation until the active/expired swap rescues them.
Add sched_enqueue_ready() public API in scheduler.c and call it
from all three wake sites.
Passes: make, cppcheck, QEMU smoke test (10s, all init tests OK).