Summary: Resolves step versions, and uses step versions to determine whether a step would need to be re-executed in a memoized run.
Test Plan: test_versioned_execution_plan.py contains some tests that hit the code path. Waiting on version storage to land before I have more complicated logic tests.
Reviewers: sandyryza, yuhan, alangenfeld
Reviewed By: sandyryza
Differential Revision: https://dagster.phacility.com/D4407