Describir: Cooperative and Noncooperative Multi-Level Programming