Don't like the design. The field 'intermediaryStates' is managed during constructors. That's hard to maintain and doesn't have other usages other than this place. This why it would make more sense to just call a function that looks recursively through the state graph and returns only the ones that are actually reachable.
But there might be some other implications about what states are reachable or not. We're still figuring this out.