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
I've looked into this once more. Invalid locations were at -1.0 and were hence always smaller than valid locations (they were doubles, so there was no custom comparison for invalid locations). Our misunderstanding comes from the fact that in the now-removed `distanceAllowInvalid(…)`, invalid locations were treated as being located at 2.0. This is only important in our implementation of `equals(…)`, but that method already handles this case correctly.