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)

I'm unfamiliar with this syntax; I can imagine what we want it to do.  I think I'd be more comfortable with
```
val newQuery = new Query(oldQuery)
newQuery.setFilter(ff.and(oldQuery.getFilter, newGHFilter))
```