Initial work to move where operations check and calculate return types.

DO NOT USE!