Page-based cache recycling.

Refactor cache recycling so that it only caches large arrays (pages) that can
later be used to build more complex data-structures such as hash tables.

 - QueueRecycler now takes a limit like other non-trivial recyclers.
 - New PageCacheRecycler (inspired of CacheRecycler) has the ability to cache
   byte[], int[], long[], double[] or Object[] arrays using a fixed amount of
   memory (either globally or per-thread depending on the Recycler impl, eg.
   queue is global while thread_local is per-thread).
 - Paged arrays in o.e.common.util can now optionally take a PageCacheRecycler
   to reuse existing pages.
 - All aggregators' data-structures now use PageCacheRecycler:
   - for all arrays (counts, mins, maxes, ...)
   - LongHash can now take a PageCacheRecycler
   - there is a new BytesRefHash (inspired from Lucene but quite different,
     still; for instance it cheats on BytesRef comparisons by using Unsafe)
     that also takes a PageCacheRecycler

Close #4557
generic thread pool should always be cached
when using generic thread pool, some elements in the code base rely on the fact that it will always be able to fork it
simplify by directly getting the search TP info
*a*wait...
Add more info to table row size errors.
Add ByteSizeValue to SegmentStats.
Add rest of indices primaries stats.
Add alias sample.
Swap help and headers params.
Add remaining aliases to cat/indices.
Document h/headers switcheroo.
Add total stats to cat/indices.
Add rest of index stats to cat/nodes and cat/shards.

Closes #4607.
Update primaryOrReplica column.