Write a program that implements the addition of fractions.
A fraction is a value object, once created it can't be mutated.
The add method must return a new Fraction object.
Fractions must be reduced. We'll provide an implementation of the greatest common divisor computation.