Support using custom sockets with libuv or libnative

This is akin to supporting custom file descriptors, but for sockets. This allows for the implementation of raw sockets in an external library, as well as integration with other libraries that use sockets such as zeromq.

It exposes a lot more of liblibc than might be desirable, but the other alternative is to add a lot of additional code which probably shouldn't be in the standard library (it quickly explodes into something monstrous like pull #11410, and that was by no means complete). This should be a minimal subset which will allow other libraries to build upon.
So in order to use `socket_from_raw_fd`, you do the following (as `std::io::*` does for anything else in `IoFactory`):
```rust
LocalIo::maybe_raise(|io| {
    io.socket_from_raw_fd(...)
    ...
}).map_err(IoError::from_rtio_error)
```
To convert from rt::IoError to std::io::IoError. Since it will be used outside of `std`, there needs to be a way to convert the error. I'd happily make this private if you can think of a way to avoid this.