Fix IK test

1. Create a common ancestor `NonlinearProgramWKinsol` for `InverseKin` and `InverseKinTraj`. When evaluating the constraints, these two classes only need to compute kinsol for once, and then cache the solution to be used afterwards.
2. Change the test files `testIK` and `testIKtraj`. Now it only checks if all constraints are satisfied, rather than requiring the nonlinear program all generate the same solution for different formulations and implementations. The current test files are more robust.
3. I find that in `pchipDeriv` or `spline` function, the ppform solution can give a ppval that is slightly different from the given value at the knot points by epsilon. This difference only exists in the last knot point. So the last posture in the `inverseKinTraj` need to be treated differently when checking if it is within the posture limits.