Refactoring in response to feedback on pull request.

Minor changes:
- Documentation noted as 'experimental'
- Changed a few generics to use <>
- Changed a few fields to private
- Removed dead code

Major changes:
- This commit is an attempt to make the syntax for describing benchmarks
  more powerful. This is primarily in response to feedback that it
  should be easier to specify indices as A) URL parameters, or B)
  competitor-level parameters. Changing how indices are parsed also
  entailed changing how cache clearing flags are parsed. Some complexity
  was added to the code around parsing due to the fact that some
  index-related objects could not be instantiated at parse-time. A
  relatively late-binding approach was needed for instantiating cache
  clearing and search request objects.
- Consolidated benchmark settings into a single class with sensible
  defaults. This allowed me to get rid of some redundant code.

Addresses issue: #5407
Merge branch 'issue-60.5' of github.com:aleph-zero/elasticsearch into issue-60.5