Networking

Someone should probably read through, @sseago? Let me know if you prefer me to squash first.
You could add a db-level constraint too I guess, but I've always added this sort of ActiveRecord constraint on these mapping models. I don't know if this is a controversial opinion in Rails-land or not.