Simplify state and locking of Promise and Composable

This commit addresses the problems detailed in issue #191. It removes
Promise's monitor, and, instead, uses the ReentrantLock from its
superclass, Composable.

The use of hasBlockers has been moved so that it's always read and
written when locked. This should eliminate the possibility of
notifications being missed.

Fields that are always accessed under a lock are no longer declared
volatile.