Add more tests for socket/network failure conditions

@camilo @jstorimer @burke @hornairs

Adds tests for socket/network failure conditions.  Any missing?

Also, I think we need a replacement for the generic rescue block in Noeq before I'd consider it shippable.  More logging definitely, but also.. if connect doesn't raise but the read does, this will loop forever.

```
62   # The workhorse generate method. Defaults to one id, but up to 255 can be   
63   # requested.                                                                
64   def generate(n=1)                                                           
65     request_id(n)                                                             
66     fetch_id(n)                                                               
67                                                                               
68     # If something goes wrong, we reconnect and retry. There is a slim chance 
69     # that this will result in an infinite loop, but most errors are raised in
70     # the reconnect step and won't get re-rescued here.                       
71   rescue ReadTimeoutError,ReadError                                           
72     raise                                                                     
73   rescue => exception                                                         
74     disconnect                                                                
75     connect                                                                   
76     retry                                                                     
77   end                                                                         
```