allow half-stars in aggregate ratings (bug 971205)

This involved rewriting the SVG and applying it as a clipping path to a span (and a span:after) on the page using CSS. One span is the grey background, the other span is the blue background, both are overlaid on each other with the same clip path and depending on the number of stars to be show, the length of the blue one is changed.

Tested in both regular and small sizes (small only shows on mobile) in various views. The number of stars gets cached locally, so half-stars may not show up until the app is rated again.
```diff
diff --git a/hearth/templates/_macros/stars.html b/hearth/templates/_macros/stars.html
index b493e14..19ecbcf 100644
--- a/hearth/templates/_macros/stars.html
+++ b/hearth/templates/_macros/stars.html
@@ -1,8 +1,9 @@
 {% macro stars(rating, detailpage=false, aggregate=True) %}
-  {% set rating = rating|round %}
+  {# Get rid of the floating point (e.g, 4.6 becomes a 4) #}
+  {% set rating_floor = rating|floor %}
   {% set rating_itemprop = 'ratingValue' if aggregate else 'reviewRating' %}
   <meta itemprop="worstRating" content="1">
-  <span class="stars{{ ' large' if detailpage }} large stars-{{ rating }}" title="{{ title }}">
+  <span class="stars{{ ' large' if detailpage }} large stars-{{ rating }}{{ ' stars-half' if rating_floor - rating >= 0.5 }}" title="{{ title }}">
     {{ _('Rated {stars} out of {maxstars} stars',
          stars='<span itemprop="' + rating_itemprop + '">' + rating + '</span>',
          maxstars='<span itemprop="bestRating">5</span>') }}
```