Remove __update_state_recursively()
Description
This is another step towards addressing #1054 (closed). Now that we are using push-based queues, we should notify reverse dependencies of an Element upon the completion of a certain action.
This patch removes Element.__ready_for_runtime from update state and introduces the (potentially recursive) functions Element.__update_strict_cache_key_of_rdeps() and Element.__update_ready_for_runtime().
- An Element will update the strict cache key of its reverse dependency when itself and it's runtime dependencies have strict cache keys
- An Element becomes ready for runtime once it has a strong cache key and once all of its runtimes have strong cache keys. When
__ready_for_runtime, we attempt to update__ready_for_runtimefor reverse dependencies.
One of the earlier commits also introduces a change to our handling of workspace state changes. A workspaced Element's cache keys are not considered "stable" until we know whether or not it is cached, thus we have now introduced a new Boolean, Element.__cache_keys_unstable.
These changes have allowed for __update_state_recursively to be completely removed.