Split Element._update_state into cache key and artifact state methods
Description
The _update_state() method is very complex and called a lot of places, making it hard to understand and probably doing more work than it needs to.
This MR hopes to at least make it easier to understand what's going on.
This MR splits Element._update_state() into three methods:
-
_update_state_cache_key(), which sets the weak and strict keys -
_update_artifact_state(), which creates the Artifact objects, stores whether the artifact is cached, etc. - `_update_state_final_key(), which sets the strong key
This merge request is part of #902 (closed), but will not close it