GEOMESA-201 Compute geometries from Geometry Filters

* This pr makes a first pass at extracting geometries to cover from the geometry filters.
* In order to do this, various things are refactored.
* GeohashUtils.getUniqueGeohashSubstringsInPolygon is widened to accept Geometries.
hopefully nobody is as degenerate a square as I am:
```
scala> WKTUtils.read("POLYGON((30 30, 30 30, 30 30, 30 30))")
res3: com.vividsolutions.jts.geom.Geometry = POLYGON ((30 30, 30 30, 30 30, 30 30))

scala> res3.getEnvelope
res4: com.vividsolutions.jts.geom.Geometry = POINT (30 30)

scala> res3.getEnvelope.asInstanceOf[Polygon]
java.lang.ClassCastException: com.vividsolutions.jts.geom.Point cannot be cast to com.vividsolutions.jts.geom.Polygon
```