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.fielddata.min`: min size fielddata breaker can shrink,
defaults to 0%
`indices.breaker.fielddata.max`: 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.min`: min size request breaker can shrink,
defaults to 10%
`indices.breaker.request.max`: 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
Not sure I follow, the bytes are still accounted, they just aren't allowed to increase. In the case of fielddata an exception is thrown and the generated data never makes it into the cache, for bigarrays the exception is thrown and memory is released in the `.close()` method of AbstractArray.java