Extract reusable ElasticSearch client handling from the implementation

This could prove to be useful in the case that someone wants to leverage existing ElasticSearch code without extending the base ElasticSearch repository implementations. In particular, this is useful if someone does not have a need or desire to extend the base class but still wants to use some of its tools without having to copy & paste a LOT of code.

The name could possibly use some work. It might also want to live elsewhere. It is currently as tested as it was before, but only by way of being used in the same way. It might make sense to also extract the tests so that they are testing the newly extracted class rather than only testing it *through* the ElasticSearch repository implementation.

It might also make sense to create a factory to create instances of these. :)

refs #109