Product::average_rating now uses db's AVG function if available

also returns undef if there are no reviews for the product