GEOMESA-234 using lexicoders for secondary index values

* Using mango lexicoders for primitive types
* Moving some encoding/decoding logic into more consistent locations
* Updating attribute strategies for querying with lexicoders
GEOMESA-326 Refactor QueryStrategyDecider to examine AND children
GEOMESA-234 handling ranges in the attribute strategy
GEOMESA-331 - Attach IndexSchema to SFTs

* Refactored IndexSchemas to be on the SFTs rather than on accessing GeoMesa DataStores.
* Note that in the tests, for MockAccumulo, max shards is 0.
GEOMESA-311,312 Handle spatial-temporal and attribute filters and queries containing multiple attribute filters

Geo & attr gets a StIdxStrategy; attr & geo uses an AttrIdxStrategy. Added
additional filters to test this behavior. (jdk2pq's work)
If multiple attribute filters are indexable, use the first one as index and apply the rest as a filter (hunter-ccri)
In the future, a query optimizer will make more informed strategy decision.
added more tests, verifying that non-indexed temporal first won't automatically result in AttributeIndexStrategy,
another verifying that indexed temporal first will result in AttributeIndexStrategy
GEOMESA-313 Handle Id and * queries

When an ID predicate is present in the ECQL filter, a scan of the record table is performed, optionally with SimpleFeature Filtering,
regardless of the type of the other ECQL predicates.
GEOMESA-245 Allow multiple features to share a (set of) tables

* This pr adds a boolean hint to the UserData in a SFT.
* To share tables, we enforce restrictions on IndexSchemaFormat:
 Schema must start with a sharding partition and a constant string.
* Table code structure has been spun out.  A nascent structure of what it means to be a
 GeoMesa table is shown.
* Attribute like-eligibility has been enforced for the Attribute Index Strategy.
* A rough test for the AttributeIndexJob is provided.
GEOMESA-367 Upgrade spark version and remove spark-yarn from build
GEOMESA-356 adding binary viewer output type
GEOMESA-373,GEOMSA-374,GEOMESA-375,GEOMESA-376

* fixing plugin to remove unnecessary dependencies
* moving all logging to log4j & slf4j via scalalogging since mini accumulo (used in tests) must use log4j and not logback
* shading guava and apache commons projects into geomesa-plugin uber jar so that existing geoserver jars don't need to be removed
* upgrading geoserver to 2.5.2 to match geotools 11.2
GEOMESA-363 Remove HADOOP_CLIENT from geomesa-tools shell wrapper

This JAR isn't required to be on the GeoMesa-Tools classpath, so it has been removed to not cause further errors.
GEOMESA-359 Visibilities is not set in all feature tables
GEOMESA-364 AvroSimpleFeature Writer

Created a new AvroSimpleFeatureWriter to implement Avro DatumWriter. Changes include:
* AvroSimpleFeature objects no longer have expensive initialization
* SimpleFeatureEncoders now are parameterized by SimpleFeatureType
* LoadingCaches converted to instance variables for type mapping
* AvroSimpleFeatureWriter handles writing instead of AvroSimpleFeature.write() method
* Reuse DirectBinaryEncoder/DirectBinaryDecoder for performance (no buffering) on read/write
* Reuse ByteArrayOutputStreams on write
* Serialization method handles any SimpleFeature type (not just ASF)
* Use cached sft.indexOf() method instead of caching via LoadingCache
GEOMESA-356 adding label for binary format in layer previews
GEOMESA-370, GEOMESA-365, GEOMESA-372, GEOMESA-371,  GEOMESA-380

* excluding imageio, grapht
* excluding jai_imageio
* excluding jgridshift
* excluding jsr305
* including shaded jars in geomesa-assemble
* making accumulo and hadoop provided in tools
* pegging version of jackson
* pegging version of snappy
GEOMESA-379 Making spark-core a provided dependency and excluding javax.servlet
GEOMESA-297 Ingest Command: Allow for Ingesting subset of data columns
GEOMESA-381 Localize TServer classloading trick

* The classloader trick which needs to happen on the tablet servers is broken out.
It should not be run by the GeoMesa GeoServer plugin.
GEOMESA-385 Annotate Return Type of defaultEncoder() Method

Allow Scala to assign to var previously allocated.
Also enabling encoding of byte arrays and fixing style
GEOMESA-382 removing vfs dependency, fixing mock setting for attribute index job
removing not-working mock param for attribute job