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 to default params.
Raise RuntimeError if solver/preconditioner type is not supported by Cusp