bug 1094767; crashstorage type for new ES module

This PR introduces a crashstorage type for the new ES module.  It also modifies the `ConnectionContext` class to bring it in line with the patterns established in the other `external` modules.  The changes to the context required some other modifications to be made to the index creation class (and associated tests).

`r?` @AdrianGaudebert @twobraids 
I think this is incorrect. It is my understanding that with this, if the ``elasticsearch_urls`` option is empty, the processors won't be able to start because this error is raised. In my opinion, we don't want to do that. We want to express a concern about the misconfiguration of this class (what ``logger.warning()`` does), but not prevent the processor to run. 

Also, what if someone mistakenly does this: 
```
[elasticsearch]
    elasticsearch_urls='dummy:9200/, , dummy:9201'
```

It's still quite valid, but it will error out here. I think you're trying to be to smart here. The check could be very basic, and we could let the underlying library do more checks if it needs them to work. Then if that one raises an error, well, let it bubble up. 

I suggest something along those lines:
```python
urls = self.config.elasticsearch.elasticsearch_urls
if not urls or len(urls[0]) == 0:
    self.config.logger.warning('cannot run elasticsearch. If it is intentional, you should remove it from the list of back-end storages. ')
```

Potentially, you could also set a flag along with the warning and use that flag in the methods of this class to abort early.