factor_terms: don't assume `as_coeff_Mul()[0]` is real
factor_terms: don't assume `as_coeff_Mul()[0]` is real

As far as I can tell, this code really wants to know if -1 can be
extracted from each term.  Well, we don't need to check `< 0` to do
that; use `.extract_multiplicative(-1)` instead.  It should still be
cheap because `.as_coeff_Mul()` is supposed to be a cheap operation.

Before:
```
>>> %timeit factor_terms(-x - Catalan*I - 1)
483 µs ± 7.54 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

>>> %timeit factor_terms(-x - Catalan*I - 1)
474 µs ± 2.66 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
```

After:
```
>>> %timeit factor_terms(-x - Catalan*I - 1)
492 µs ± 8.87 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

>>> %timeit factor_terms(-x - Catalan*I - 1)
503 µs ± 12.4 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
```

kaushik94/sympy,kaushik94/sympy,kaushik94/sympy