GEOMESA-121 Rewrite input filters with ORs at top.

* Implemented rewriting arbitrary filters in Disjunctive Normal Form.
  This means that any ORs have been 'bubbled up', and any NOTs have been 'pushed down'.

  The resulting filter tree has at most one OR at the very top.
  Additionally, each child of that OR is an AND or a base filter.

* Implemented property-based tests for the filter rewriting functionality using ScalaCheck.

Of note:  A clear optimization is that attribute filters need not be split up or otherwise mangled.
This issue is as https://geomesa.atlassian.net/browse/GEOMESA-171

* Refactored some of the test code to pull data generation.
It provides some of this capability.  It simplifies double-negation and joins adjacent, like binary operators in a sane way.  

Also, the attempt to figure out dual filters is cool.  In terms of filter rewriting, I've got some more ideas which I need to sort out.  This is a reasonable intermediate step and will let me focus on addressing topological, temporal, and attribute filters in turn.  

After some of that work, I'll be ready to iterate on rewriting filters.