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
GEOMESA-459 CloseableIterator cannot close

resolved error in CI.empty; implemented tests for CI.empty
GEOMESA-453 ClosableIterator flatMap may end prematurely

refactored ciFlatMap method to use an internal tail-recursive helper, and added a test that smashes the stack with the old code.
Merge branch 'accumulo1.5.x/1.x' into fcr_parse_attr_spec

Conflicts:
	geomesa-core/src/main/scala/org/locationtech/geomesa/core/data/AccumuloDataStore.scala
	geomesa-core/src/main/scala/org/locationtech/geomesa/core/data/tables/AttributeTable.scala
	geomesa-core/src/main/scala/org/locationtech/geomesa/core/index/AttributeIdxStrategy.scala
	geomesa-core/src/main/scala/org/locationtech/geomesa/core/index/index.scala
	geomesa-core/src/test/scala/org/locationtech/geomesa/core/data/ComplexFeatureTest.scala
	geomesa-core/src/test/scala/org/locationtech/geomesa/core/iterators/AttributeIndexIteratorTest.scala
	geomesa-feature/src/main/scala/org/locationtech/geomesa/feature/AvroSimpleFeatureUtils.scala
	geomesa-utils/src/main/scala/org/locationtech/geomesa/utils/geotools/SimpleFeatureTypes.scala
	geomesa-utils/src/test/scala/org/locationtech/geomesa/utils/geotools/SimpleFeatureTypesTest.scala