TODO(user): The search tree can be balanced by using binary "Try"-builders "recursively". For instance, Try(a,b,c,d) will give a tree unbalanced to the right, whereas Try(Try(a,b), Try(b,c)) will give a balanced tree. Investigate if we should only provide the binary version and/or if we should balance automatically.
TODO(user): remove this complex logic. We need the double test because parameters are set too late when using python in the open source. This is the cheapest work-around.
TODO(user) : optimize constraint to avoid ping pong. After a boolvar is set to 0, we remove the value from the var. There is no need to rescan the var to find the hole if the size at the end of UpdateActive() is the same as the size at the beginning of VarDomain().