[SPARK-3741] Make ConnectionManager propagate errors properly and add mo...

...re logs to avoid Executors swallowing errors

This PR made the following changes:
* Register a callback to `Connection` so that the error will be propagated properly.
* Add more logs so that the errors won't be swallowed by Executors.
* Use trySuccess/tryFailure because `Promise` doesn't allow to call success/failure more than once.
I understand what this corresponds to, but it might be clearer to call it something like `failWithoutAck`.  The `receiveNonAck` seems slightly confusing to me, since we sometimes call this method when closing a connection, in which case we haven't received anything (this is actually triggered in cases of non-receipt).