Describir: Flexible Design by Contract