Convert set_response to a no-fail function

The message is optional after all. If it isn't present, some information
may be lost, but it is not a protocol violation, so the remote side MUST
be able to cope with it.
cleanup: return type of copy_string()

This function has nothing to do with the connection itself, so it can
have a standard "kernel-style" convention: 0 is success, <0 is error.
cleanup: return type of ensure_buffer

Same as previous commit, but for ensure_buffer.
Fix handling of BAD responses

Many helpers return conn_error if there is a syntactic error. If this
status is passed as the return value of a handler, the connection is
closed. This is far too brutal on a syntactic error. ;-)