Feature/distance

Change the return type of `distance` and `comparable_distance` free functions.
In more detail:
* `distance` returns `distance_result<...>::type` or `default_distance_result<...>::type`
* `comparable_distance` returns `comparable_distance_result<...>::type` or `default_comparable_distance_result<...>::type`