Added Gradient method and tests.

Gradient computes finite differences of vector-valued function using finite difference
I'm concerned that this might produce roundoff error.  Wouldn't it be better to do
xcopy[i] = x[i]?  
Or do you expect x to change?