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.
Could we add some accessors to cluster for manipulating its `machines` field? Maybe `TrackMachine` for this? The `machinePresent` function below could easily move into `cluster` as well.