Add operation lookup by {controller, action}
This optimization avoids having to call open_api_operation(action)
in each call to CastAndValidate for phoenix controllers.
The caching behaviour is moved into a separate module, and
updated from CastAndValidate the first time a phoenix controller/action
is used to resolve an Operation.