Math/Point2D: add template argument for result type to *Product()

Prepare for "long" result which may avoid integer overflows.
Math/Point2D: simplify DotProduct(), CrossProduct() template argument

Pass the Point2D type instead of its scalar_type.
Math/Point2D: add function Normal()
Topography/ShapePoint: add forward constructor
Math/Point2D: add function ManhattanDistance()

Replaces the old manhattan_distance() functions.
OpenGL/Triangulate: use CrossProduct(), Normal(), DotProduct()
{Screen,Topography}/Point: rename SquareType to product_type
Math/Point2D: add struct FloatPoint

Base class for ShapePoint.
OpenGL/Triangulate: include cleanup
OpenGL/Shapes: migrate to GLFallbackArrayBuffer

Eliminate the duplicate circle drawing code.