stream write callbacks have different error codes on windows and unix when closing the socket

If we close a socket and there are still some writes left then windows will call the callbacks of these writes with ECONNABORTED and unix with ECANCELED.

In https://github.com/joyent/libuv/pull/1359 we had to have a work around in the test case

CANCELED and ABORTED is basically the same, the operation has been cancelled, but with ABORTED it gives more information to us: the socket has been closed or some failure happened on the socket, it is not just a simple cancel.

Here we are closing the socket but returning just an ECANCELED in unix: https://github.com/txdv/libuv/blob/e3cb3d183ab3071bfc4fc45d20ea2148f42c4d85/src/unix/stream.c#L382

We are about to close the socket and flushing the queue in order to invoke the callbacks. It makes sense that we use ECONNABORTED instead of ECANCELED.

Even from a binding for C# perspective it makes sense to me(or any other language which has class orientated exception handling): I would make ABORTED a subclass of CANCELLED or create a class encompassing both classes. 

**Another case we have to check is what error code windows returns if the peer closes the socket**.

Another reason why we should return ABORTED on unix is because we have a CANCELED error code on windows:
 
IOCP supports cancelling operations: http://msdn.microsoft.com/en-us/library/windows/desktop/aa363789(v=vs.85).aspx

> You can cancel asynchronous I/O from any thread in the process that issued the I/O operation. You must specify the handle which the I/O was performed on and, optionally, the overlapped structure that was used to perform the I/O. You can determine if the cancel occurred by examining the status returned in the overlapped structure or in the completion callback. A status of ERROR_OPERATION_ABORTED indicates that the operation was canceled.

ERROR_OPERATION_ABORTED = ECANCELLED