Reviews / Rework how star ratings are calculated and displayed

Reviews in general need a reworking, but the critical issue for now is to avoid the way star ratings are rendered as it is a performance problem.  I think we need a new field on the product model that caches the rating for a product and is updated whenever a new review is submitted.

Tasks:
- [ ] Adjust product model to have a rating field.
- [ ] Ensure product rating field is correctly updated when new reviews are submitted
- [ ] Provide a data migration to populate the new rating field on products (or perhaps provide a management command)
- [ ] Adjust templates to use new rating field rather than building the star rating in JS