(WIP) Cdodge/shopping cart rewrite

This entire `else` clause seems a bit brittle.  Do only `PaidCourseRegistrations` use codes?  What if you wanted to offer a coupon on the price of `CourseRegCodeItem`s, is that currently supported?  If not, I guess the code's all right.  If you did want to support it, I think you'd need to have `item` be the specific subclass returned from `OrderItem.objects.filter().select_subclasses()`, and then use `getattr(item, 'course_id')` to eliminate special casing on `paidcourseregistration`