[WIP] Implementation of guaranteed delivery from ForwardOutput to ForwardInput

This is a implementation of #408.

Protocols between ForwardOutput and ForwardInput are extended, adding `option` object to the end of the array, which is used to identify which chunks are written into the buffer.

Additional behaviors of ForwardOutput and ForwardInput are as follows:

#### ForwardOutput
ForwardOutput sends data including `option` object which has object id of the chunk with a value of `seq` key. After sending data, ForwardOutput waits for a response from InputForward in a certain time.

* If there is a response:
  * and if `ack` value of the response is same as `seq` value of sent data, it succeeded.
  * but if `ack` value and `seq` value are different, ForwardOutput sends the chunk again.

* If there is no response, ForwardOutput regards the target node as unavailable but does not send the chunk again because of compatibility.

#### InputForward
InputForward checks if received data includes `option` object. If it does, InputForward responds to OutputForward after the chunk is written into the buffer (Engine.emit). The response has the `seq` value of the received data as a value of `ack` key, and is serialized in the same way as received data.

If we can select whether to require ack or not, we can specify not to require ack for fluentd nodes which does not support sending response.

So we should retry sending chunk here for nodes without responses.