GEOMESA-432 Improved GeoMesa Tools script

This PR addresses some usability issues with the geomesa shell script. Now environment variables
for hadoop and accumulo can be optionally set, and individual paths can be overridden by the user.
Also more informative messages are printed when certain variables are not set.

GEOMESA_HOME and GEOMESA_LIB are now set in function calls, "configure" still works and now should
print out what needs to be added to persist the configuration.
GEOMESA-456 Fixing WMS TIME parameters
GEOMESA-417 unique attribute process

* added WPS process to retrieve unique attributes
* cleaned up and standardized explain query output
* fixed typo in minicluster README, moved minicluster logs into logs/ folder
* adding option to sort by count
GEOMESA-424 cql 'OR' filter query does not deduplicate

* moved deduplication code into QueryPlanner.getIterator method and used it for both duplicatable data and OR queries
* refactoring to be a bit more selective
* added inclusion-exclusion test to AccumuloDataStoreTest
GEOMESA-458 Default geom field can have index=false

* Default geometry now always gets index set to true
GEOMESA-455 Add caching as an optional param to data stores

* Adds a caching param to data store constructor
* If caching param is toggled, then requests to getCount and getFeatures
  will cache resulting feature collection in AccumuloFeatureSource
GEOMESA-457 Optimize sorting of results

* Sorts results based on SortBy parameters
GEOMESA-428 checking for SRS when determining axis order in binary output format

* adding default dtg from schema if not specified in request
* ensuring 24 byte encodings all are 24 bytes
GEOMESA-449 adding support for lists and maps in simple feature attributes

* Using SimpleFeatureTypes.createType(), you can specify a list or map:
    * names:List[String]:index=true
    * weights:Map[String][Double]:index=false

* Attribute values will be instances of java.util.List or java.util.Map when retrieved

* Lists can be queried through CQL which will execute against the individual items in the list
    * Can use standard comparison operators
    * Given the attribute names=List('bill', 'bob', 'henry') =>
        * (names = 'bob') will match
        * (names < 'joe') will match
        * (names > 'joe') will match
        * (names > 'mark') will not match

* Maps can not be queried, but can be stored and retrieved
reviewer suggested changes, using implicit java conversions
using combinator parsers to match sft spec class strings