Add a benchmark endpoint for elasticsearch that simplifies benchmarking
queries, faceting and suggestions including highlighting etc.

This endpoint allows benchmarking individual queries against each other
or different query setups like larger sizes or pagination. All types
that are allowed in a SearchRequest passed to `_search` can also
be passed to `_bench` in order to be benchmarked.

The current version registers itself in the cluster state and allows to run
on nodes that are flagged with `-Des.node.bench=true`. This allows to run
benchmarks from multiple nodes etc. We also have the ability to cancle / abort
benchmarks if they are are not returning etc.

TODOs:
 - add support for percolator?
 - add support for pre / post round executions like clear caches or
   expand replicas / wait for green
 - add support to send per query result to another index
 - add support for suggest endpoint to test in isolation
 - allow to produce indexing load maybe via a script
 - allow listing of running benchmarks via REST and API
 - allow abort via REST api (only java currently)
 - add tests for cache clearing
 - add support for cache clearing in the REST API
 - add upperbounds for iterations etc. to prevent OOM
Checkpoint for reviewing code
Refactored benchmark code to separate various actions into separate
packages.

Created REST handlers for each benchmark action: list, status, abort,
and submit. This also somewhat simplifies the benchmark API endpoint
namespace.
Added the concept of a 'spec group', since this idea was already
implicit in the way competitors/specs could be grouped together into a
single request. Updaed JSON structures accordingly.

Implemented 'list' feature to see active benchmarks.

Removed randomly assigned benchmark id and instead use the user-provided
spec name everywhere.
Adding percentiles and meta-data clear