engine: add partitioning based on unit count

This reworks the partitioning framework, simplifying it dramatically in light
of the new engine reconciler model. It also implements functional partitioning
of the cluster based on the recently-added LoadedUnits count in MachineState.
I know it's exciting but rest assured it will return in Episode III: Revenge of the Sync when we start making `Reconcile` more efficient and asyncy :-(