Allow multiple outstanding responses
Previously, the send() goroutine would block until an executed response
handler wrote a response to the response channel. If a response handler
does not write a response to the channel immediately, e.g. because it
blocks on some sort of event, neinp would not process further messages
until this response handler unblocks. This is due to the fact that the
send goroutine would be blocked on the response channel.
This commit allows for multiple outstanding responses by executing a
separate send goroutine for each response. Additionally a mutex is
utilized to prevent concurrent writes to the socket. Response handler
error handling has also been slightly adjusted accordingly.