What is PyTorch's dynamic computational graph and how does it differ from TensorFlow 1.x's static graph?