I've been working on factoring network:: classes (session, channel, and protocol) into base behavior and derived [class]_peer and [class]_client, with existing specializations derived from the _peer side of the hierarchy.
I've just completed the separation, which also has a small impact on node::. I'm going to rename the network::p2p class to net because it will end up hosting both peer and client channels.
I'm not sure I'm totally excited about the source organization, but it's at least reasonably isolated and should be performant. I'm running now to verify.