reader: fix msg.Requeue and potential msg.Touch deadlock

Turns out we didn't *need* #12 after all, the `FinishedMessage` struct already has a `RequeueTimeoutMs` field.  Also, by sending the command via `cmdChan` in-flight accounting became inconsistent.

Also, `Touch()` could cause deadlocks if the connection closed while trying to send on `cmdChan`.