Add level two optimizations for constant propagation transformation. (#7410)
* Made the python script generating the testcases modular.
* Modified RemoveBackToBackCasts function to remove cast even if the parent node has other consumers.
* Modified InsertCastNodes to update the graph consistently for other functions to work.
* Moved ConcatNames function to the top.
* PropagateBackward/SearchUpstream and PropagateFP16CastsFromOutputsToInputs insert FP32 casts if the level >1 in order to propagate FP16 casts backwards.
* Added new testcases for level two setting.