refactor(activation): extract potential promise handling

Activation callbacks may return a value or a promise for a value. This
refactoring extracts the code which determines which case occurred and
processes it. As part of this, more robust promise handling code was
added. In the future, this refactoring would also make it easy to add
generator control-flow support to the lifecycle.