Add a poll flag for one-shot callbacks in AsyncSocket
The original change had an issue. When the read and write callbacks
fire in parallel, both would release the reference to the SharedStream,
triggering its destructor. Later when the read callback tried to
re-register itself, it would hit a boost exception. To avoid that,
delay the reset of CallbackFD::stream to the end of Invoke so that the
SharedStream object will not be destroyed as long as the callback is
re-registered.