Fix 3D joint handling of collision exceptions, so that they lose effect when the joint is not valid in every case; also some redundant code removed.
Also avoid trying to create the joint when not neither body A nor body B are set.
Make 2D joints be handled like their 3D counterparts, which adds the fixes to them while also removing duplicated code.
(adapted from commit 4a98a59aa6)