[SPARK-2583] ConnectionManager error reporting

This patch modifies the ConnectionManager so that error messages are sent in reply when uncaught exceptions occur during message processing.  This prevents message senders from hanging while waiting for an acknowledgment if the remote message processing failed.

This is an updated version of @sarutak's PR, #1490.  The main change is to use Futures / Promises to signal errors.
There are some other tests that use `sendMessageReliablySync`, which has an infinite timeout.  This method is only used in one or two places, so I'm going to remove it and force callers to supply their own timeouts.