PyTorch Functionalization

Given a program/function of PyTorch operators, functionalization will return a new function, that:
1. Has the same semantics as the old function
2. Has no mutations in it

Functionalization operates at the level of our ATen API.

More info on PyTorch - Functionalization in PyTorch - Everything you need to know