many changes to elasticsearch after reading ebook

- Broke up elasticsearch.index() into .create_index() and index(),
  with mapping setup in create_index().
- create_index() uploads mapping JSON file. File path is currently
  hard coded, should eventually become a settings item.
- get() -> get_document().
- For put_document() the list-of-field-dicts format of the DDR
  JSON files was changed to a straight dict.  I thought this might
  help with the mappings and faceting.  We'll see.
- query() now just returns the raw ElasticSearch output.
- Functions were moved around to make more sense.
function for listing model fieldnames until we can refactor models

This function will be used by ddr-public to list fields in order.
we don't need request data to be format=pretty
added facet_terms() function
must actually use the facet in the request to ElasticSearch...
collection,entity,file models coded in JSON

Hopefully this will be more flexible than writing them in Python.
Importing won't be necessary.  They can be placed somewhere and
referred to in a settings file.  These should be visible from
both ddr-local and ddr-public.
get model fields list from JSON model files
generate ElasticSearch mappings from JSON model files

JSON model files have an "elasticsearch_properties" field
control index recursion; support new- and old-style ES doc formats

- Adds recursion flag to index().
- Fixed settings() URL.
- Made create_index() and delete_index() into hidden functions.
- Removed all the *_exists() functions.
- Renamed get/post/delete functions to more closely match HTTP
  request types.
- post() now supports both old-style list-of-dicts metadata format
  (ddr-local) in addition to new normal-dict format (ddr-public).
- Force explicit passing of index arg.
- ddrindex command
Merge branch 'master' into 137-browse-ui

Conflicts:
	ddr/DDR/elasticsearch.py
	ddr/setup.py
make _model_fields() nonprivate so ddr-public can use it
lots of work on elasticsearch mappings for ddr-public

- ES seems to require mappings to be done separately for each type,
  so reformatted DDR.elasticsearch.MAPPINGS into list of dicts.
- Modded ._create_index() to create each of the mappings.
- Adding a ddrindex-mappings command to print nice mappings on the
  command line.
- .post() now returns path, HTTP response code, and ES's response
  JSON. Modded .index() accordingly.
- .index() prints list of paths that didn't work, with error messages
  after it's done.

Updated mappings for models:
- Turned off fucking automatic date detection.
- Stuff for other fields. Not done with this yet.
add all post() args to startup log
mv JSON headers closer to request code
functions that interact with ElasticSearch directly return JSON
ES mapping for entity.parent
ES mapping for entity.files
ES mapping and cleaning/normalization function for entity.creators
better reporting of ES index function
elasticsearch.get() returns JSON with status code and raw text