[ENH] sparse.linalg.LinearOperator: add +, *, **

Enhances LinearOperator such that they can be
added, multiplied and exponentiated.
[TST] sparse.linalg.LinearOperator: test +, *, **
MAINT,TST: use isintlike and add __pow__ test
MAINT: use subclasses for LinearOperator operations
LinearOperator: make it callable
LinearOperator: catch ValueError and return NotImplemented
BUG: sparse/linalg: fix NotImplemented vs exceptions in __sub__
BUG: sparse/linalg: pep8 fixes
BUG: sparse/interface: improve test coverage + fix a bug in PowerLinearOperator
BUG: sparse/interface: return NotImplemented only when operand type is unknown

Failures in matching shape etc. should raise ValueErrors on operation.
ENH: sparse.interface: document and test the args attribute of LinearOperators
Merge pull request #2692 from andrenarchy/linearoperators

ENH: sparse.linalg.LinearOperator: add +, -, *, and ** operators

These commits enhance the LinearOperator class in sparse.linalg such that they
can be added/substracted, multiplied and exponentiated. Unit tests are included
and should cover all cases. The unit tests for LinearOperator were also
restructured a bit.