MDL-42962 events: Add a abstract class course_module_viewed

AMOS BEGIN
 CPY [eventcoursemoduleviewed,core],[eventcoursemoduleviewed,mod_feedback]
AMOS END
MDL-42962 events: Add unit tests for the abstract class course_module_viewed
MDL-42962 events: Remove duplicate code from all course_module_viewed events