apply joint constraints during IK

Adding AngularConstraint base class and variants for enforcing angular constraints on elbows and wrists:

HingeConstraint is used whenever rotation is limited to a single axis, which is often the case for the elbow.

ConeRollerConstraint is a conical swivel that has limited roll and is used for the hands.  The angle of the cone (from central axis to outside surface) is the average of the pitch and yaw ranges.

Also added AngularConstraint::softClamp() which tries to split the difference between the targetRotation and the corresponding hard clamped position.

Re-enabled the gravitational term to the IK algorithm because some models have default poses that don't look good when mixed with naive IK.
The AngularConstraint base class has a softClamp() method that works well for the ConeRollerConstraint, but not very well for the HingeJoint -- tends to momentarily lock arm in an extended position until it suddenly snaps to a more correct solution.  So we override the softClamp() behavior for the HingeConstraint below.