engine: refactor clusterState; track changes during reconcile
engine: schedule to agent with least number of units