Handle RestartStream exception within the greenlet context instead of outside.

This is necessary for code that may throw RestartStream in response to another greenlet callback, for example a nonblocking DNS query.
When this happens, the except RestartStream: is no longer present in the parent greenlet and the exception may end up in the DNS socket class.
This causes the stream to not be properly restarted.