Inner products derivative

Lots of reorganization on the internals of the code. Only one external change. See #70 for a discussion.

Change:
```python
dMdsig = self.mesh.getEdgeInnerProductDeriv(sig, v=u)
```

To:
```python
tensorType = Utils.TensorType(mesh, sig)
dMdsigFun = self.mesh.getEdgeInnerProductDeriv(tensorType)
dMdsig = dMdsigFun(u)
```

This has the following advantages:
* Generalizes to different meshes and anisotropic properties.
* Clearer and closer to the math

Disadvantages:
* May require a few more matvec products in some cases.