update Fortran back end to support type conflict
Using derived type in Fortran to support type conflict, while one variable
may be assigned with different type values, we make this variable a union,
and each field in the union corresponds to one different type. Although we
really don't encourage assigning different type value to one same variable,
we still provide this solution to handle this.
Example:
if (condition)
   a = 10;
else
   a = 'hello';
end

-->

TYPE cell_a
   DOUBLE PRECISION :: f0
   CHARACTER(5) :: f1
END TYPE cell_a
TYPE (cell_a) a

IF (condition)
   a%f0 = 10;
ELSE
   a%f1 = 'hello';
ENDIF