Add RedistributingCircuitBreakerService

Adds a breaker for request BigArrays, which are used for parent/child
queries as well as some aggregations. Certain operations like Netty HTTP
responses and transport responses increment the breaker, but will not
trip.

This also changes the output of the nodes' stats endpoint to show the
parent breaker as well as the fielddata and request breakers.

There are a number of new settings for breakers now:

`indices.breaker.redistribution.enabled`: whether breaker redistribution
is enabled, defaults to true.

`indices.breaker.redistribution.size`: data size to attempt to
redistribute in addition to asked size, defaults to 3%

`indices.breaker.max`: Limit for all breakers, defaults to 70%

`indices.breaker.fielddata.max`: max size fielddata breaker can grow,
defaults to 60%
`indices.breaker.fielddata.min`: min size fielddata breaker can shrink,
defaults to 0%
`indices.breaker.fielddata.limit`: starting limit for fielddata breaker,
defaults to 50%
`indices.breaker.fielddata.overhead`: overhead for fielddata breaker
estimations, defaults to 1.03

(the fielddata breaker settings also use the backwards-compatible
setting `indices.fielddata.breaker.limit` and
`indices.fielddata.breaker.overhead`)

`indices.breaker.request.max`: max size request breaker can grow,
defaults to 40%
`indices.breaker.request.min`: min size request breaker can shrink,
defaults to 10%
`indices.breaker.request.limit`: starting limit for request breaker,
defaults to 20%
`indices.breaker.request.overhead`: request breaker estimation overhead,
defaults to 1.0

The breaker service infrastructure is now generic and opens the path to
adding additional circuit breakers in the future.

Fixes #6129
can't you use `Long.compare(b1Free, b2Free)`?