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

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.

Addresses issue: #5407