dda: Generalize the zero-distance case

When approximating distances, if any axis delta is zero we can
choose to consider only the remaining one(s).

This does increase the code size a few bytes, but is arguably more
accurate in specific "lateral move" cases.
Add gnuplot script to explore approximate_distance

Error is less than 5% for explored range [0,200000]
approx_distance_3: Accept signed and convert to unsigned

Simplify further (and save more bytes) by teaching approx_dist_3 to
accept signed values and normalize them for us.  Maybe we should
also teach approx_dist (2d) to do the same, but I did not do that here.