GEOMESA-122 Split OR filters into multiple queries

* Created a OrSplittingFilter Visitor which helps break apart a more complex Filter into pieces.
* Moved up the SelfClosingBatchScanner into core and implemented a basic CloseableIterator trait.
Okay, I'm (easily) baffled:  If `cur` is initialized to `empty` (so, presumably, `cur.hasNext` will be false), and `hasNext` calls `innerHasNext`, then how does the `self.hasNext` on line 47 not begin an endless loop?  There's something simple I'm overlooking; thanks!