Multiple mappings per index

Can define different mappings per index, which use the index_name as
the lookup key.

This is so you can add additional properties in other indexes.

Also refactored the tests to make them easier to read
remove solr backend
Remove unused recommended_format argument

it was used by the solr wrapper and included for api compatibility, but
it is no longer needed.
Make documents aware of their index

the main motivation for this is to allow documents to know which fields
are supported by their index, so that serialization and field validation
can be done properly.

In app.rb, rather than calling Document.from_hash directly, the document
is requested from the backend (which knows its index).

The ElasticsearchIndexingTest has been changed slightly to allow
stubbing the mappings configuration. This has become necessary now that
the a Document will only accept the assignment of field values which are
supported by its index.

I introduced SearchIndexEntry as a common ancestor of Link and Document.
This model seems closer to reality and more readily comprehensible.
Consistent quote style
Make explicit that Marshal dump/load is for deep copy
Avoid need to stub Sinatra::Application.settings

The call to .settings in #admin_wrapper would invoke the global
settings method which is defined by Sinatra::Delegator and would
delegate to Sinatra::Application. By changing this call to
explicitly invoke app.settings we avoid the need to stub
settings in two places.
Use strings rather than symbols for document field names

This avoids any possible future risk of symbol table attacks should
there be a future way that user input might get passed to the has_field?
method for example (not aware of any way this might happen at present).
Explicitly check status code after posting a new document

Also refactored the tests to make their intention clearer.
Fix case on an include.
Merge branch 'schema-per-index'

Merge in two changes:

  * Remove Solr support
  * Add per-index document schemas