Use relative and absolute tolerances for Spike::GPU (hardcode absTol = 1e-10).
Record solution time and number of iterations for every linear solve.
Dump Spike solver stats to file on failure.

However, continue Newton iterations, unless the solver failed by generating a NaN or reaching the maximum number of iterations.
Fix to allow continuing on some failures of the iterative linear solver.
Modify Newton stopping criteria.

- set the Newton tolerance based on step-size and position-level precision
- change convergence test to use infinity norm of correction
Cleanup problem specification.
Modifications to the preconditioner update strategy.

- remove condition based on number of Newton iterations (not meaningful)
- use average number of Krylov iterations per Newton iteration to force a preconditioner update (if specified)