unix, windows: add uv_fileno

Returns the platform specific file descriptor for handles that are
backed by one. The datatype is abstracted as uv_os_fd_t, which maps to
int on Unices and HANDLE on Windows.

Users can use this function to set specific socket options, for example,
in a non portable way.

This function is essentially a shotgun, you better be careful with
whatever you do with it, don't blame me if you used it to get the fd of
a stream, close it yourself and expect things to Just Work.
Maybe `UV_EXTERN int uv_file(const uv_handle_t* handle, uv_os_fd_t* fd);`?  Libuv can't really return a meaningful error now.