GEOMESA-93 Implement KNN as a WPS function

* Add a K-Nearest Neighbors Search that implements a GeoHash-by-GeoHash query strategy.
* Expose the KNN Search as a WPS process.
* Include an example KNN Search based on the location of the White House.
* Add a bounded PriorityQueue implementation.
* Add a method which, given a GeoHash, retrieves a list of all other GeoHashes in contact with it.
* Using the above method, implement a 'GeoHashSpiral' an Iterator that produces GeoHashes in order of distance from a point.


See https://github.com/locationtech/geomesa/pull/147 for prior review history and comments. 

Please note that server-side geodetic calculations and KNN ordering will be left to future tickets.

Some methods should be moved to other parts of GeoMesa (particularly the GeoHash tools)

The original test from @jnh5y as well as the new one failed when maxDistance was set to a value that is too small. The algorithm is sound, but this is a possible problem on the user side. I've created a ticket to address it: https://geomesa.atlassian.net/browse/GEOMESA-285