"In-use" tracking and proper Close()

Before, the `client.Close()` method could race under (unlikely) failure conditions. Now we keep track of the number of "in-use" connections and close after all of them have been returned.

(The worry in the previous implementation was that a call to `c.done` could, in principle, throw a nil pointer dereference on `c.pool` if the timing was inopportune.)

Also, `c.newconn` is a little smarter now; it runs through a random permutation of the address list on ever dial attempt, so we're guaranteed that every node is tried exactly once before it returns an error.

Also also, `c.tag`, `c.cons`, and `c.inuse` are `int32`s now, and there's a test to double-check that those fields are 8-byte aligned.