Computer Science Education at Scale: Providing Personalized and Interactive Learning Experiences Within Large Introductory Courses