Declare kernel argument of correct size for interpolating on VFSes

The local tensor is space_dimension * dim (which is 1 for function spaces).
Default to conjugate gradient Krylov method when projecting

The system is SPD so don't explicitly set the KSP type to CG (rather
than the default GMRES).
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.
Merge pull request #252 from firedrakeproject/projection_fix

- Fix declaration of kernel parameter for expression interpolation onto
  vector function spaces.
- Don't stomp on user's parameters dict in solve.
- Switch to using conjugate gradient when projecting.