Refactoring: Use case object to generate toString
Fix NodeSet.pick: use mongos node if available and avoid PrimaryUnavailableException in case of SecondaryPreferred