Designing Multi-Agent Systems around an Extensible Communication Abstraction