(WIP) Cdodge/shopping cart rewrite

again here, the code might blow up if you ever had `order_item`s that don't have a `course_id`. `get_attr` might be safer.