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
Use .getOrElse for this pattern:

```scala
Try {
  val encoded = typeRegistry.encode(value)
  val ret = typeRegistry.getAlias(value) ++ NULLBYTE ++ encoded
}.getOrElse(genericAlias ++ NULLBYTE ++ value.toString)
```