Fix Bugs by Tightening Control on Timing

Introduces a polling technique in the `after()` method to only
move to the next state after expected conditions are satisfied.
Adds Speed Prop

A long collapsible with short duration opens with much more speed
than a short collapsible with the same duration. This feels
inconsistent. We want them to open with the same speed. Therefore,
speed should be consistent and duration should rely on content height.

Adds speed prop to propTypes and getDefaultProps, with a default of
800 pixels per second.

Adds setTransitionDuration() method that calculates duration based
on speed and content height (contentHeight / speed = duration) and
sets the duration on the body.

Adds a call to setTransitionDuration() in setBodyHeight() since we
will always want to do them at the same time.