Add method for principal curvatures and directions at point on arbitrary implicit surface

Simbody's ContactGeometry class already had a method for calculating principal curvature and directions for parametric surfaces, but we needed one for Daniel Lopes' superellipsoids which are implicit. With some help from @stavness, this adds a new method `calcSurfacePrincipalCurvatures()` which uses only the implicit function and its derivatives. Only lightly tested but seems to work correctly on the implicit form of ellipsoids and bicubic surfaces.