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.