Implement prototype convergent computations.

Provide the ability to specify a type on delcaration.  If the type is
undefined, then assume a single-assignment term.  If the type is one of
the supported riak_dt types, bind immediately to the bottom value and
allow the variable to be re-bound, while rebinding all dependent values,
if it monotonically increases in value.

In addition, resolve a series of circular dependencies, which trigger
deadlocks when vnodes need to coordinate actions against themselves.

Finally, resolve bugs where single-assignment variables were not
considered final.