[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.
I'll update the test to check whether the failure is due to a timeout exception or some other exception.  This might be important because I think this current test might have passed even with the old code due to the timeouts (the original PR didn't have this issue; I think I inadvertently messed it up while refactoring).