Compute final residual using SNESGetFunction

No need to have two implementations when one should work for all versions of PETSc.

This might fail a MOOSE test until idaholab/moose#3781 over there is merged.  I'll keep an eye on it.