Refactoring of the PeerSocket class

The old implementation looked kind of messy to me and had some
experimentation code in it. So I redid this. Here is the code for
receiving messages, I'll implement sending in just a minute
Successful disposing

This was one of my hardest parts. When the socket was closed, the SAEA
objects returned with their Completed event and I just figured that out.
Now the event is supposed to reschedule a receiving object as fast as
possible and the previous attempts failed, because either the socket or
the objects for receiving had already been disposed.

With the current implementation that all works. There is no rescheduling
when the socket is disposed thanks to the _isReceiving flag.

NET-4