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
In linux the temporary errors are EINTR=Interrupted system call, EMFILE=Too many open files, EAGAIN/EWOULDBLOCK =Operation would block, ETIMEDOUT=Connection timed out.
The idea with Temporary is that the connection is valid and can stay in the connection pool.