Add a Buf trait for managing read / write buffers

Read and write functions tend to do a couple of things. Read (or write)
from an byte array and return the number of bytes that were used.
Typically, the user will read or write in a loop until all pending data
is consumed.

Buf is an abstraction that combines a set of bytes with a cursor that
can be advanced. When passing a buf to a socket for reading or writing,
the socket will attempt to consume as much as possible.
Fix a few slab bugs and test
Tweak io APIs + add a unit test for the reactor

Change a few APIs that were expecting Sockets, but only actually
depended on IoHandle, to take IoHandle. In general, only APIs that rely
on setsockopts or connection should require Sockets.
Tweak IO APIs, Slab & Buf work, echo server test

IO APIs now return NonBlock, which is an enum of a successfull operation
or an indication that the operation would have blocked if it could.

Besides that, more work is done on the Slab and various Buf
implementations in effort to get a full stack echo server test working.

The echo server test is functioning, but does not properly handle
closing connections yet.