Cdodge/shopping cart rewrite

Probably just want to add some comments here about why this logic to swap back and forth between `PaidCourseRegistration` and `CourseRegCodeItem` is necessary.