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
That would be like bringing the functional `Either` data type to Java. I like that idea ☺ While the `Either` approach would work equally well, I wouldn't consider a class that guarantees an *invalid* location to be very useful (nor do invalid locations have any methods that valid locations don't).

I think we could as well go for `Location` and `ValidLocation`, where the latter is a subclass (thus specification) of the former. The latter would of course implement most of the actual location methods, both would have a method `validate()` that either throws an exception or is essentially a no-op (except for the type checker). The static factory methods in `Location` make this even easier to implement. I'll give it a go!