Supporting Diversity and Evolvability in Communication Protocols