rpcserver: use more sophisticated handling for ConnectionError.
In general, we don't want to return a ConnectionError for a simple EOF condition; we only want to report an error when there's an actual failure.
Also, it's a good idea to capture the actual error return conditions that we get from aynchronous_codecs, rather than throwing them away as we did before.
Closes #1517 (closed).