Peer comms

For issue 5. This is mostly complete. If we want to add a better interface, I can amend the pull request, but if we want to merge this in now so everyone can work off of it, that works too.