Rework Coord nearest_neighbour calc to support circular cases.

To enable correct nearest-neighbour calculation with circular coords.
Added comprehensive test cases, as behaviour divides into different cases and is very hard to pin down.  In particular, the existing calculation was divided between bounded and no-bounds cases, which I was unable to unify as some cases are rather odd.
As a bonus, the new implementation makes much more sense of overlapping or disjoint bounds.