Fix tcp-echo-server

Now its mostly identical to the canonical tcp echo server in the libuv codebase, just slightly simplified with a little less error handling. Biggest difference is that we now introduce write_req_t, which is a better way to manage the read buffer than trying to hack it with req->data. Also we use uv_buf_init to initialize buffers, mostly because it looks cooler and saves a line of code.