Add unary negation support for Point2D and Length

This will allow doing things like rect.translate(&-point), which make
the code much simpler and easier to read.