Drake gradient util

Pull request for C++ gradient utilities. I put general purpose functions like {get,set}SubMatrixGradient, transposeGrad, etc. in drakeGradientUtil, and functions that compute gradients of geometrical things in drakeGeometryUtil.
Do you think this is terrible? The only place I use it in Matlab code, I take the second derivative from the function and reshape it right back into the form that this function currently outputs (n x n^2) for an n-D vector. If we don't expose it to the Matlab side of things, is this OK?