If we don't get a response from a command in a while, resend it. This doesn't
normally happen (it only happened during firmware development), but it makes
command sending more robust, so let's keep it. This also uses a single OVERLAPPED
for a whole command, which is simpler.
This improves recovery if a start packet is received when we didn't receive a complete
packet earlier. This doesn't normally happen, this just matches the error recovery used
in game.