Don't overwrite user solver_parameters dict

For mixed problems, we set the default pc_type to jacobi by calling
setdefault on the provided parameters dict.  If the user passed one in,
this modifies it in place.  So take a copy for ourselves before changing
it.
Test that carrying out multiple projections is reproducible

    x = project(foo, V)
    y = project(bar, Q)
    z = project(foo, V)

Should result in x and z having identical values.