Part of the appeal of this change is the decoupling from `Hash` itself. In fact, the current code is even worse because it's coupled to *whatever* the user provides. It's often a `Hash` but it sometimes a `HashWithIndifferentAccess` or even `ActionController::Parameters`. All of these have different behaviors and slightly different APIs.

The big win here isn't the change from hash access to method access. The big win is defining our *own* API and locking down its behavior.

We could potentially keep hash access rather than method access but if you read ahead to the "Return Value" section, we would be expected to access our resulting context with hash access as well. It wouldn't be the end of the world but I don't like it as much because I think it's cleaner and easier to test if the context's data is accessible via method access in the controller.