DOC: sparse.linalg: typo
ENH: sparse.linalg: take LinearOperator in svds

Should allow solving PCA for sparse matrix.
DOC: advertise svds(LinearOperator) + vanity
BUG: sparse.linalg: fix up svds for complex-valued linearoperators

Also fix the tests to sort the singular values, since they are not
necessarily in order.
ENH: sparse.linalg: refactor LinearOperator class hierarchy

... and document how to create a proper subclass of it: by
implementing some "kernel" methods (protected methods for the
C++/Java crowd) that receive properly validated input from
public wrapper methods.

Behavior of LinearOperator(matvec=some_callable) is preserved
using __new__ magic to create a factory function that returns an
instance of the proper subclass. No more monkey-patching!
ENH: sparse.linalg: add adjoint to LinearOperator

Implemented for the basic operators; still need a general implementation
that uses the rmatvec method.
BUG: sparse.linalg: remove broken Py3 support hack
MAINT: sparse.linalg: use new LinearOperator facilities
ENH: sparse.linalg: default _rmatvec and _adjoint
BUG/TST: sparse.linalg: test expm exact and inexact algorithms

Code previously failed on sparse matrices.
ENH: sparse.linalg: implement matvec as matmat and vice versa

Also improved the subclassing documentation and put in some input
validation.
DOC: sparse: intro + example for LinearOperator interface
DOC: sparse.linalg: prefer dot method on linear operators