add write suspend and rewind inflight data to obufq in channel

- like request, in-flight response is kepted in an output channel as a
  string for it to be opaque to Channel module.

- Write_suspended exception indicates the current writev is suspended
  before completion. It's raised with the offset that shows the amount
  of data written to user_buffer. So, rewind the data from the offset
  to obufq in the output channel. This data is snapshot by
  Channel.get_state and will be restored after migration.

  cohttp catches the exception and immediately tries to read from its
  input channel. Channel considers "this trying to read while inflight
  response exists" as an exception (Normally, input channel should be
  read with response being None). So, in this case, Channel blocks the
  reader on abort_t and this will be woken up by Channel.get_state. This
  ensures that the cohttp's connection to be migrated is suspended until
  the input/output channels are snapshot. After woken up, the reading
  thread sets its inflight request to "", which means it's closed by
  migration (not end-of-stream) and informs cohttp closes its connection
  stream.

- fix snapshot logic in user_buffer.rx

- add some debugging messages