Retooled the finite_gradient function in propagate.

Now instead of differentiating with the standard basis only, it is
capable of differentiating in a different basis.

Specifically, it will differentiate in bases aligned with the
hypersurface.
Can now make any dimension of symm mat from a vector