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
I'll add more comments. The basic difficulty was going from an Option to a Try, which seemed to require the fold. In java code i would have done:
```java
encoder = findEncoder()
decoder = findDecoder()
if (encoder == null || decoder == null) {
  logger.warn("no en/decoder")
  return null
}

try {
  return decoder.decode(encoder.encode(value))
} catch (Exception) {
  logger.warn("error encoding/decoding")
  return value
}
```