Altered arguments to accept types for which there is a lens, as opposed to accepting a concrete type. Not sure if this is a good idea, but seems principled and allows doing things like passing a Waypoint to compute a vincenty distance instead of a concrete Coordinate.

Also added some haddock.