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.
I resorted to using macros to do the explicit instantiations, e.g.

    #define MAKE_MATGRADMULTMAT_EXPLICIT_INSTANTIATION(Type, ARows, ACols, BCols, DARows, DBRows, NQ) \
    		template Eigen::Matrix<Type, matGradMultMatNumRows(ARows, BCols), NQ> matGradMultMat(const Eigen::MatrixBase<Eigen::Matrix<Type, ARows, ACols>>&, const Eigen::MatrixBase<Eigen::Matrix<Type, ACols, BCols>>&, const Eigen::MatrixBase<Eigen::Matrix<Type, DARows, NQ>>&, const Eigen::MatrixBase<Eigen::Matrix<Type, DBRows, NQ>>&);
    MAKE_MATGRADMULTMAT_EXPLICIT_INSTANTIATION(double, 3, 1, 3, 3, 3, 3)
    MAKE_MATGRADMULTMAT_EXPLICIT_INSTANTIATION(double, 4, 1, 4, 4, 4, 4)
    MAKE_MATGRADMULTMAT_EXPLICIT_INSTANTIATION(double, 8, 6, 9, Eigen::Dynamic, Eigen::Dynamic, Eigen::Dynamic)
    #undef MAKE_MATGRADMULTMAT_EXPLICIT_INSTANTIATION
    
    #define MAKE_TRANSPOSEGRAD_EXPLICIT_INSTANTIATION(Type, Rows, Cols) \
    		template Eigen::Matrix<Type, Rows, Cols>::PlainObject transposeGrad(const Eigen::MatrixBase<Eigen::Matrix<Type, Rows, Cols>>&, int);
    MAKE_TRANSPOSEGRAD_EXPLICIT_INSTANTIATION(double, Eigen::Dynamic, Eigen::Dynamic)
    MAKE_TRANSPOSEGRAD_EXPLICIT_INSTANTIATION(double, 3, 3)
    MAKE_TRANSPOSEGRAD_EXPLICIT_INSTANTIATION(double, 4, 4)
    MAKE_TRANSPOSEGRAD_EXPLICIT_INSTANTIATION(double, 9, Eigen::Dynamic)
    #undef MAKE_TRANSPOSEGRAD_EXPLICIT_INSTANTIATION

But it's still extremely painful to find all the right sizes. Also, these don't handle cases where there's a `Transpose`, or `Map`, etc.

I'm really wondering if there's a simple test we can do to figure out if implicit instantiations are really an issue when it comes to memory management via Matlab. It would save me a whole lot of time if we could resolve this sooner rather than later.