Fix incomplete cholesky.
We can't always insert an element on the diagonal if zero, since
it might be an explicit zero, in which case the element already exists.
Instead, added a method to SparseMatrix: findOrInsertCoeff, that
sets an output parameter to indicate if the entry did not previously exist.
Also allow returning the shift parameter from IncompleteCholesky, so
we can verify the decomposition.
Fixes #2791 (closed).