Add a "primary temp" to go with "pg temp"

This PR adds OSDMap (and interface) support for
1) Specifying a PG primary separately from the order of the OSD list,
2) Overriding the primary with a primary_temp the same way pg_temp works.

To do so, it updates the OSDMap encoding (with appropriate feature bit versioning) to our modern encoding standards and does some of the preliminary work to eliminate obvious primary-as-0 dependencies in the OSD, as well as adding primary-specifying versions of all the mapping functions which we should use going forward.

Because it does not yet include any feature bit or versioning protections on the use of primary_temp, and figuring out how to deal with old clients once we do want to use primary_temp is hard, the primary_temp paths are rendered inaccessible in a Ceph cluster (there are no access methods and the monitor will assert out).