Performs automatic differentiation in the traditional adjoint/tangent way.
Forward writes become backward reads and vice-versa. This can lead to problems when parallel reads lead to parallel writes,
and therefore to race conditions. Therefore, theres is also _create_backward_assignments_tf_mad that can circumvent that problem in the case of stencils that have only one output