Better tests, new data types, correct radius

Introduced 2 new data types (Angle and Distance) which help to
encapsulate the units being used in the maths.

Unit tests were rounding wrong - Mike, you had rounded the results AND
put an nunit delta of +/-2, changed this to NOT round and used a delta
of +- 0.001

Added a correct implementation of earth radius based on WGS formula -
the earth is not round - radius needs to change based on latitude
(probably should add a few more tests around this though).