ENH: interpolate: rewrite ppform evaluation in Cython
TST: interpolate: Py3 fix
ENH: interpolate: add derivative evaluation to PPoly
ENH: interpolate: implement antiderivatives in PPoly
ENH: interpolate: smarter implementation of piecewise polynomial continuity fixing
ENH: interpolate/_ppform: remove unused variables
ENH: interpolate/_ppform: remove unused at_endpoint feature
ENH: interpolate: evaluate integration in PPoly + refactor the code a bit
ENH: interpolate: make c and x public attributes in PPoly
ENH: interpolate: add PPoly root finding
DOC: interpolate: add a warning about the power basis
BUG: interpolate: fix bug in returning object arrays from PPoly.roots + add another roots test
ENH: interpolate: add PPoly.extend that appends new intervals
ENH: interpolate: add __slots__ and a fast constructor to PPoly

Also add a sorting check to the constructor.  The fast constructor is roughly
20x faster than the default one:

In [1]: import numpy as np
In [2]: c = np.array([[1, 4], [2, 5], [3, 6]])
In [3]: x = np.array([0, 0.5, 1])
In [4]: from scipy.interpolate import PPoly
In [5]: %timeit PPoly(c, x)
10000 loops, best of 3: 20 us per loop
In [6]: %timeit PPoly.construct_fast(c, x)
1000000 loops, best of 3: 1.26 us per loop
TST: interpolate: test extending PPoly with different orders
ENH: interpolate: special case low-order roots in PPoly + add a test
DEP: interpolate: deprecate ppform
MAINT: make _ppoly.pyx work also on older Cython versions
ENH: interpolate: remove fill_value completely from PPoly

Instead, extrapolate based on the outermost intervals.  This makes
integrals, derivatives, antiderivatives, and root finding robust
operations.
BUG: interpolate/_ppoly: sort roots to avoid reporting duplicates