Refactored version release state mutation logic.

I replaced the task based implementation with a lifecycle
based implementation. Now, when the taskGraph is ready--an
event that occurs after the configuration phase completes
and before the execution phase starts--the version release
state will be set to 'release' as necessary, and only when
necessary.