Fix a problem in computing the t_knot. Now the starting and ending time of each contact constraints are also t_knot. And if a user-supplied t_knot is too close to the the moment that a contact starts or end, then the user-supplied one is discarded