The initial iteration of the OAuth2ForDevices flow stored intermediate state on the flow object itself. Rather than attach it to the flow, this change pulls it out into its own separate object. In addition to making the Flow object reusable, this also makes it easy to serialize and deserialize this state, so that (for example) the flow could begin in one python process and finish in another (even on another machine).