feat(ocaml-tls): add full TLS state machine fuzz test
Add [main_sm] — a state machine fuzz test where both sides operate in
permanent drain mode with independent random op sequences
(Sm_send/Sm_shutdown_send/Sm_key_update/Sm_epoch).
Both sides' handshake and first ops run in the same Fiber.both fiber
with no yield between them. This means when the server executes
Sm_shutdown_send immediately after server_of_flow, its close_notify
lands in the same buffer batch as ServerFinished + NewSessionTicket,
triggering the Read_closed path inside drain_handshake that the
controlled-transmit [main] test misses.
This test caught the drain_handshake bug (End_of_file raised when state
is Read_closed with handshake already complete) before the fix was
applied, and passes cleanly with the fix in place.
Also add Epoch op to both [main] and [main_sm] to verify epoch is
accessible in all states.