Non-recursive lock-free cycle detection rework.
Since now on cycle detection is not performed at TXN validation phase
but at controller install time instead.
The solution is based on 'cycle detection set' (CDS) idea described as:
 * any controller that is transitioning from DOWN state cannot
   participate in any dependencies cycle and so it is removed from CDS
 * any controller that is transitioning to DOWN state can
   participate in any dependencies cycle and so it is returned back to CDS
 * when controller is installed and it has dependencies then it
   is put to CDS and installation process includes cycle detection,
   where currently installed controller is the starting node of cycle
   detection algorithm and all its dependency controllers that are in CDS
   are investigated whether they create dependencies cycle or not
 * controllers without dependencies are never inserted into CDS
 * if there is a dependencies cycle detected then all its controllers are in CDS

Lock-free algorithm feature is achieved via atomic reference to immutable objects.
Cycle detection algorithm is accessing these atomic reference snapshots
without any lock being held. This is crucial for lock contention avoidance.
The CDS idea works because we don't support neither OPTIONAL nor ANTI dependency types.