IO::Endpoint provides a separation of concerns interface for IO endpoints. This
allows you to write code which is agnostic to the underlying IO implementation.
