CPP-146 Handle node status and topology changes

Also, handling protocol version downgrade and automatic reconnection