Restore the broken reconnect timeout and add the hacky "fix".
More error handling improvements.

* Exceptions as a result of commands (BAD/NO) are delivered to tasks
  waiting on the blocking command methods.
* There is still danger that exceptions can be delivered to the wrong task
  if they are unhandled; this is a Celluloid problem.  Exceptions fired in
  one task will leak over into an arbitrary other task (presumably the most
  recent one) that yielded to the Celluloid message delegator.