Location: use Location objects instead of doubles

**Note that this changeset is not finished yet, do not merge. I have opened this pull request to get your early feedback. I will append future changes here.**

This commit replaces most double-typed locations with Location objects. Most important exception is network-level messages. String representation of the new Location objects remains unchanged (i.e. textual double representation).

The general idea is that only very low-level parts of the code have to have knowledge on the type (and peculiarities) of the actual location encoding, most parts can do with some simple operations on locations (e.g. distance, isValid).
Those operations are now encapsulated in the Location objects, instead of providing them as static operations on doubles. The old static Location methods are converted to work on Location objects, and are deprecated for future removal (this causes a lot of warnings at the moment).

This changes mainly serve to prevent errors in duplication of location logic. Apart from this, it may also serve as preliminary work for switching the internal representation of locations from doubles to longs, if that may be considered necessary at some point.

To do:
* documentation of introduced methods
* removal of deprecated static methods
Fred never calculates any distance involving invalid locations**. An unchecked exception and a "please report this bug" error message would have been the result if one were to do that. Fred does obviously calculate distances between valid locations.

** except for the now-removed `distanceAllowInvalid`, which was used to determine equality and ordering, which functionality I appear to have ~~broken~~ modified. That will soon be fixed for backwards compatibility.