broke io::read/write out into non-buffering and buffering solutions

OK.  Here is the pull request which addresses issues #45, #46, and #47.   It is pretty large,  the IoEventCtx plays a more important role in things, since re-registration is so common.  I  renamed to IoEventCtx and added the Token to it, to simplify the interface into the the register functions. 

For an advanced example of how the event re-registration can actually help simplify a state machine, check out the revised test_echo_server. 

* more tweaks to make the tests pass, also made the return type uint instead of () so the customer doesn't have to go looking through the buffer for answers
* addressing issues 45, 46, and 47.  Added re-registration via an IoEventContext into the event_loop. Supports both edge triggered and level triggered setups.  
* Changed * net::read and write to not use a loop.. added read_all and write_all to use them and perform the old behavior
* got all tests passing
That seems like a lot of overhead and hassle for the purposes of avoiding accidentally re-using a socket that one has explicitly closed (e.g. probability near 0).  I am for changing the fd to -2 in os::close() (such as posix)