crush: add infrastructure around new chooseleaf_vary_r tunable

- encoding
- feature bit
- decompile/compile

Signed-off-by: Sage Weil <sage@inktank.com>
crush: add SET_CHOOSELEAF_VARY_R step

This lets you adjust the vary_r tunable on a per-rule basis.

Signed-off-by: Sage Weil <sage@inktank.com>
crush: add infrastructure around SET_CHOOSELEAF_VARY_R rule step/command

This will let you vary the vary_r tunable on a per-rule basis.

Signed-off-by: Sage Weil <sage@inktank.com>
crushtool: new cli tests for the vary-r tunable

These illustrate the variation in mapping results as the vary_r tunable
is adjusted.  In particular, for a legacy cluster, we can use a value like
4 to minimize the number of PGs that move while now getting the valid
mappings that we need.

The crushmap here comes from a user who was seeing a bad mapping for
certain pgs after some OSDs were reweighted by utilization.

Signed-off-by: Sage Weil <sage@inktank.com>
crush: add firefly tunables baseline test

This is a user's map that gives different results when the vary_r tunable
is adjusted.

Signed-off-by: Sage Weil <sage@inktank.com>
doc/rados/operations/crush: describe new vary_r tunable

Signed-off-by: Sage Weil <sage@inktank.com>
mon: allow firefly crush tunables to be selected

Signed-off-by: Sage Weil <sage@inktank.com>