Optimise and fix triangle area calculation.

When investigating possible optimisations, I realised that I had made an
error in my original implementation using l’Huillier.  The error was
that s = a + b + c should have been s = (a + b + c) / 2.  The s stands
for semiperimeter!

As a result, the areas were slightly inflated, but not catastrophically
enough for us to notice by eye.

This fix is an optimised implementation using a formula due to van
Oosterom and Strackee (1983).