Improve Elasticsearch initialization

Improve the way that Elasticsearch is initailized in a couple ways:

- Take the analysis settings from the classes the same way that the
  mappings are taken.

- Merge mappings and analysis into the initial index creation. This
  avoids the need to close and re-open the index for the initial
  analysis settings configuration.

- Re-open the index in a finally clause, to ensure that it is never
  left closed when performing analysis settings updates.

- Detect index already exists error more robustly.
Suppress log messages when ES index exists
Merge pull request #1825 from hypothesis/improve-elasticsearch-create

Improve Elasticsearch initialization
Refactor back end authentication

Change the authentication to encapsulate it better within the h.auth
package, removing details from h.api and making more idiomatic use
of OAuthLib.

- Move ``h.auth.local`` to ``h.accounts``.

- Split remaining pieces of ``h.auth`` into an ``h.oauth`` package and
  modules ``h.authentication`` and ``h.authorization``.

- Move ``h.interfaces.IConsumerClass`` to the ``h.oauth`` package and
  rename it ``IClientClass``.

- Add ``request.get_client`` and ``config.set_client_factory``.

- Drop pyramid_multiauth and replace it with better considered use of
  pyramid_oauthlib.

- Stop the confusing double-use of 'request.user' by unsetting the
  request property set by horus.

- Move session configuration to h.session.

- Drop the consumer/client implementation in the accounts system in
  favor of shipping only with a default. This is a place that can be
  expanded later once there is a model in place for relating
  authorizations, clients and users. Until then, the default will
  be sufficient.