Generate Cusp solver tailored to solver parameters

Since we have the parameters dict we can just generate a solver for
the selected preconditioner and krylov method type instead of a
generic solver that determines the types at runtime from the parameter
values.

Also add gmres_restart and monitor_convergence to default params.
Raise RuntimeError if solver/preconditioner type is not supported by Cusp