(update: please ignore my comment below, I mentioned it in a couple other places as well, but later saw that you already addressed this in your last PR)    A nit question that we don't have to address in this PR. Would it be a BC-breaking change if we just supported constructing `OptimizerHookState` directly from an optim class? What do we gain by the current `__init__` behavior beyond "injecting" our `_allow_empty_param_list` argument?