Rewrite of the Location class.

This fixes bugs:
* Location.equals(0.0, 1.0) returned false
* Location.distance(invalidLoc, invalidLoc, true) did not return 0.0

Further changes:
* Reuse change() (e.g. simpleDistance() is just abs(change()))
* Reuse isValid() instead of explicit bounds checks
* Simplify change()
* Simplify normalize()
* Use LOCATION_INVALID (= -1.0) instead of magic numbers
* Add just a bit more documentation
Complete Location Javadoc comments and fix equals() semantics.

Location.equals() now also considers two invalid locations as equal, similar to Location.distance() with allowCrazy. This is just for sake of completeness, such a situation will never be encountered in reality.
Use proper IllegalArgumentException instead of NullPointerException in Location.

This exception was never uniquely checked anyhow (and it occurence IMHO always indicates a bug), so no further code changes are necessary.
Use proper IllegalArgumentException message in Location.
allowCrazy is crazy. Get rid of it.
Merge pull request #230 from bertm/rewrite-location

Rewrite of the Location class