Improve Elasticsearch initialization

Improve the way that Elasticsearch is initailized in a couple ways:

- Take the settings from the classes the same way that the mappings are
  taken.

- Merge mappings and settings into the initial index creation. In this
  manner, the settings are only ever configured the first time through,
  which prevents the scary need to close the index and re-open it.

- Detect index already exists error more robustly.
Oh, I misread your comment. The answer is no because we're doing `mappings.items()`. The `mappings` dict is `body['mappings']` in the create index call.

But there's something else wrong and weird here. I thought I had to pass the doc type as a keyword argument, but that's giving me `put_mapping() got multiple values for keyword argument 'doc_type'` and I don't know why.