DotaMath: Decomposition of Thought with Code Assistance and Self-correction for Mathematical Reasoning