added elementary arithmetic operations on algebraic numbers

In master ``minimal_polynomial`` is slow or stalls in some simple cases, which in this PR are done fast.

Examples solved in a fraction of a second in this PR, which take a long time or stall with the old algorithm

```
>>> ex = (1 + 2**Rational(1,7))**3
>>> minpoly(ex, x)
x**7 - 7*x**6 + 21*x**5 - 203*x**4 - 1561*x**3 - 2247*x**2 - 35*x - 27
>>> ex= (1 + sqrt(2) + 2*2**Rational(1, 4))/(1 + 2**Rational(1, 4))
>>> minpoly(ex, x)
x**4 - 4*x**3 + 6*x**2 - 4*x - 1
>>> ex = solve(x**3 + x + sqrt(2))[0]
>>> minpoly(ex, x)
x**6 + 2*x**4 + x**2 - 2
>>> ex = (1 + 3*3**Rational(1, 5))/(1 + 3**Rational(1, 3) + 3*3**Rational(2, 3))
>>> degree(minpoly(ex, x))
15
```

Issues related to this PR: 

2789 : partially solved; ``minpoly(exp(I*pi*r))``, with ``r`` rational, can be computed, but little more can be done
in trigonometric expressions.

2835 : if a subexpression is ``1/0`` an exception is raised. 

3769 : solved; algebraic operations on algebraic numbers are implemented

The old algorithm is accessible with the option ``compose=False``;
in the examples I tried, it is sometimes faster than the new algorithm in expressions which take little time;
when the old algorithm is faster it is usually by 10%, but there are rare cases in which it is a few times faster, e.g.
 for `` ex = (1 + 3*2**Rational(1, 3))*(1 + 2**Rational(1, 3))``  the old algorithm takes 0.01s, the new one 0.08s.

I think it is unlikely that there exists a case in which the new algorithm stalls and the old one does not;
in the old one the main bottleneck is ``groebner``, then factorization; in the new algorithm the bottleneck
is factorization.