What is the purpose of pairing IDs with the NetworkMessageHandler? NetworkMessages have destinations built into them. Also why do we send around NetworkMessageHandlers?

I feel like there is a cleaner way to get the host and the host ID when you have a host being added to the map. I'll keep thinking about it because I don't have an upfront solution.

Actually, when you receive the NetworkMessageHandler you should be able to call handler.Id() (so make that function a part of the interface)

Also, SwarmId should be Blockchain.