core: clarify/fix the code dealing with horizontal ordering wrt to cpusets

Always order objects on a level based on the complete_cpuset.
The cpuset can get unordered because of disallowed/offline PUs.
For instance 0x1111<0x2222 can become 0x1100>0x2220 if 3 PUs
are disallowed.

When comparing, use complete_cpuset if available (always correct order)
or fallback to cpuset (should be correctly ordered during early discovery
when complete_cpuset isn't initialized yet).

This fixed some overzealous debug assertions/warnings added in v1.8.

This commit fixes #105.

(cherry picked from commit 28c63b053faf92c9d06e66ca2382a00a11e95528)

Required in v1.7 to complete 7daf12385d2e51031cabcb65e3406c6cac15bc4a