cursh: optimized crush algorithm for balanced pg distribution among osds

We met an issue of read performance issues (17% degradation) when working on ceph object storage performance evaluation, and found the root cause is unbalanced pg distribution among all osd disks, due to current CRUSH algorithm. We decided to do some optimization on it.

At first, we add a new pps hash algorithm based on the "congruential pseudo-random number generator", which hashes the original raw pgid sequence to some permutation of it. It can produce a uniform pps key space as input for CRUSH.
Then we introduce a new bucket type called "linear", and apply a new modulo based hash algorithm to it, with a balance parameter to adjust for the best distribution uniformity.
At last, we make it an adaptive procedure by adjusting the balance parameter automatically during the preparation for creating a new pool, according to different cluster topology, PG# and replica#, in order to gain a most uniform distribution.

Signed-off-by: yujiehe <yujie.he@intel.com>
Two questions:
1- Are you sure that pool() and stable are fully independent here, or are the 1033* and 2* arbitrary?  
2- Are there restrictions on the size of the 1033 prime?  If this is similar to the mechanism used by the uniform bucket, I think the prime has to be larger than the modulo denominator.

Also: in order to intoroduce a new pg to pps mapping, we need to add a new pg_pool_t flag similar to HASHPSPOOL .. maybe HASHPSPOOL2 or HASHPSCONGRUENTIAL or something.  Then this would be an alternate branch in the existing raw_pg_to_pps()