ErrBadConn to signal that the connection is in bad state

ErrBadConn is send only when there is a permanent network error and:
1) when Begin is called to begin a transaction,
or
2) when Exec/Query/QueryRow is called without an active transaction.
Upon receiving a ErrBadConn, the database/sql package, closes the connection and retries the Begin/Exec/etc in another connection.

@denisenkom please review