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 state field has been removed from Promise. This field represented
a duplicate of the state held in the error and value fields and
introduced the risk of bugs causing this state to get out of sync. The
Promise's state is now always determined by looking at the value and
error fields:

	Both error and value being null means the promise is pending
	Error being non-null means the promise failed
	Value being non-null means the promise succeeded
	Both error and value being non-null is prohibited

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.