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.
Some settings needs a 'deep update'. The analysers defined by Document would now simply replace those defined by Annotation. Perhaps we should replace `__settings__` with `__analysers__` and `__filters__`, and merge those here. Most settings are cross-model anyway so it makes no sense to define them inside a model.