First version of structured partial fraction decomposition
Extend the partfrac structure

The roots are given implicitely by a polynomials:

In [6]: apart_structured(f)
Out[6]:
(1,
 Poly(0, x, domain='ZZ'),
 [(Poly(x - 2, x, domain='ZZ'), Lambda(_a, 4), 1),
  (Poly(x**2 - 1, x, domain='ZZ'), Lambda(_a, -3*_a - 6), 2),
  (Poly(x + 1, x, domain='ZZ'), Lambda(_a, -4), 1)])

In [7]: assemble_partfrac_full(_, x)
Out[7]: -4/(x + 1) - 3/(x + 1)**2 - 9/(x - 1)**2 + 4/(x - 2)

In [8]: pprint(_)
    4        3          9         4
- ───── - ──────── - ──────── + ─────
  x + 1          2          2   x - 2
          (x + 1)    (x - 1)

Some roots are given explicitely by a list of algebraic numbers:

In [5]: pfds = (1,
 Poly(0, x, domain='ZZ'),
 [(Poly(x - 2, x, domain='ZZ'), Lambda(a, 4), 1),
  ([1, -1], Lambda(a, -3*a - 6), 2),
  ([-1], Lambda(a, -4), 1)])

In [6]: assemble_partfrac_full(pfds, x)
Out[6]: -4/(x + 1) - 3/(x + 1)**2 - 9/(x - 1)**2 + 4/(x - 2)

In [7]: pprint(_)
    4        3          9         4
- ───── - ──────── - ──────── + ─────
  x + 1          2          2   x - 2
          (x + 1)    (x - 1)
Make structured apart return separate function for num and denom:

In [3]: f = 36 / (x**5-2*x**4-2*x**3+4*x**2+x-2)

In [4]: apart_structured(f)
Out[4]:
(1,
 Poly(0, x, domain='ZZ'),
 [(Poly(x - 2, x, domain='ZZ'), Lambda(_a, 4), Lambda(_a, -_a + x), 1),
  (Poly(x**2 - 1, x, domain='ZZ'),
   Lambda(_a, -3*_a - 6),
   Lambda(_a, -_a + x),
   2),
  (Poly(x + 1, x, domain='ZZ'), Lambda(_a, -4), Lambda(_a, -_a + x), 1)])

In [5]: assemble_partfrac_full(_)
Out[5]: -4/(x + 1) - 3/(x + 1)**2 - 9/(x - 1)**2 + 4/(x - 2)

In [6]: pprint(_)
    4        3          9         4
- ───── - ──────── - ──────── + ─────
  x + 1          2          2   x - 2
          (x + 1)    (x - 1)
Do not special case rational functions that are in fact polynomials
Use dummies for RootSum symbols
Fix doctests
Documentation of structured partial fraction decomposition
Update partfrac docstrings
Replace old 'apart_full_decomposition' by new methods
Tests for new partial fraction functions
Make apart_lists tests succeed
Fix last test failure
Address some review comments
Add assembled partial fraction decompositions to all examples
Add 'assemble_partfrac_list' to autoexports

Motivation for this is that we show it in all examples, hence
it should be available to the user without an additional import.
Merge pull request #1796 from raoulb/partfrac

First version of structured partial fraction decomposition