Free goroutines on command timeout

Previously, if the command timed out, nothing would receive on the done
chan. When the command was Kill()'d, the c.Run() goroutine would never
send to done. Instead, buffer done so everything can clean up.
No need to log the query here
Attempt to prevent WMI stalls from hanging forever

If WMI is temporarily down, timeout after 20s and allow other things to
try. This should prevent the WMI bug in #11.

We have to do more intelligent handling of the process and readers and
writers. I'm sure there's a race bug in here, but I have fixed all the
crashes I could create.