Add gradient descent, including parameter estimation, and some vector utilities