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!