COP: Context-Oriented Programming