Interaction-Oriented Programming: Abstractions for Engineering Decentralized Multiagent Systems