Don't try to disconnect if address never resolved to begin with

Call to disconnect triggers call to pool, which uses address.resolved
as a hash key. This in turn causes pollution of the connection pool.
Don't append nodes to seeds until DNS resolves

Test for equality of Node (==,#eql?) depends on node.address.resolved.
Therefore avoid such tests (such as .include?() ) until address is
resolved. This fixes unbounded growth (read: memory leak) of the seeds
array in unstable network environments.
Prevent ensure_connected from returning half-setup connection on reentry
Test for a connection should include non-alive socket
Ensure mongodb credentials are always sent upon (re)connection

If existing socket is reset, perhaps due to mongod failure,
credentials hash isn't reset. This causes them to not be sent upon
reconnection. Changed to reset at connect() instead of relying on a
disconnect() that may or may not happen.

Also cache last set of credentials so they can be reused when connection
loss is detected by with_connection().
Merge pull request #324 from zarqman/fix-auth-errors

Fix 16550 "not authorized", TypeError, and others